summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBernhard Posselt <dev@bernhard-posselt.com>2013-09-22 15:09:14 +0200
committerBernhard Posselt <dev@bernhard-posselt.com>2013-09-22 15:09:22 +0200
commit2f651f709db1c41a6b1d4a3fc12df15d6b19e577 (patch)
treec70d46102d59b1c85575dce32fad920f7c33e432
parent7d7511714d370268feccef0681a8d89777b38978 (diff)
64bit integers for everyone
-rw-r--r--CHANGELOG5
-rw-r--r--appinfo/database.xml13
-rw-r--r--appinfo/info.xml2
-rw-r--r--appinfo/version2
-rw-r--r--middleware/corsmiddleware.php2
-rw-r--r--tests/unit/middleware/CORSMiddlewareTest.php2
6 files changed, 22 insertions, 4 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 04dde23e7..1f73c2313 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,8 @@
+owncloud-news (1.604)
+* Use 64bit integers to prevent running out of ids after a year for large installations
+* Fix postgres feed queries with correct group by
+* Article enhancers now transform relative links on a page to absolute links
+
owncloud-news (1.603)
* Fix JavaScript errors which prevented the translation elements from being removed
diff --git a/appinfo/database.xml b/appinfo/database.xml
index b574369a9..b60e4339a 100644
--- a/appinfo/database.xml
+++ b/appinfo/database.xml
@@ -13,10 +13,12 @@
<autoincrement>true</autoincrement>
<unsigned>true</unsigned>
<primary>true</primary>
+ <length>8</length>
</field>
<field>
<name>parent_id</name>
<type>integer</type>
+ <length>8</length>
<notnull>false</notnull>
</field>
<field>
@@ -41,6 +43,7 @@
<field>
<name>deleted_at</name>
<type>integer</type>
+ <length>8</length>
<default>0</default>
<notnull>false</notnull>
<unsigned>true</unsigned>
@@ -71,6 +74,7 @@
<notnull>true</notnull>
<autoincrement>true</autoincrement>
<primary>true</primary>
+ <length>8</length>
<unsigned>true</unsigned>
</field>
<field>
@@ -110,6 +114,7 @@
<name>added</name>
<type>integer</type>
<default></default>
+ <length>8</length>
<notnull>false</notnull>
<unsigned>true</unsigned>
</field>
@@ -117,6 +122,7 @@
<name>articles_per_update</name>
<type>integer</type>
<default>0</default>
+ <length>8</length>
<notnull>true</notnull>
</field>
<field>
@@ -124,11 +130,13 @@
<type>integer</type>
<default>0</default>
<notnull>false</notnull>
+ <length>8</length>
<unsigned>true</unsigned>
</field>
<field>
<name>folder_id</name>
<type>integer</type>
+ <length>8</length>
<notnull>true</notnull>
</field>
<field>
@@ -167,6 +175,7 @@
<field>
<name>id</name>
<type>integer</type>
+ <length>8</length>
<notnull>true</notnull>
<autoincrement>true</autoincrement>
<primary>true</primary>
@@ -199,6 +208,7 @@
<field>
<name>pub_date</name>
<type>integer</type>
+ <length>8</length>
<unsigned>true</unsigned>
<notnull>false</notnull>
</field>
@@ -220,16 +230,19 @@
<field>
<name>feed_id</name>
<type>integer</type>
+ <length>8</length>
<notnull>true</notnull>
</field>
<field>
<name>status</name>
<type>integer</type>
+ <length>8</length>
</field>
<field>
<name>last_modified</name>
<type>integer</type>
<default></default>
+ <length>8</length>
<notnull>false</notnull>
<unsigned>true</unsigned>
</field>
diff --git a/appinfo/info.xml b/appinfo/info.xml
index d1b69d89a..121cc7b69 100644
--- a/appinfo/info.xml
+++ b/appinfo/info.xml
@@ -5,6 +5,6 @@
<description>An RSS/Atom feed reader. Requires the App Framework app and backgroundjobs need to be enabled. See the README.rst in the apps top directory</description>
<licence>AGPL</licence>
<author>Alessandro Cosentino, Bernhard Posselt, Jan-Christoph Borchardt. Powered by SimplePie (Ryan Parman, Geoffrey Sneddon, Ryan McCue and contributors).</author>
- <version>1.603</version>
+ <version>1.604</version>
<require>5.0.6</require>
</info>
diff --git a/appinfo/version b/appinfo/version
index 86def1b20..b83cfd46a 100644
--- a/appinfo/version
+++ b/appinfo/version
@@ -1 +1 @@
-1.603 \ No newline at end of file
+1.604 \ No newline at end of file
diff --git a/middleware/corsmiddleware.php b/middleware/corsmiddleware.php
index 4fec2faa1..9b84e9dc4 100644
--- a/middleware/corsmiddleware.php
+++ b/middleware/corsmiddleware.php
@@ -1,7 +1,7 @@
<?php
/**
- * ownCloud - App Framework
+ * ownCloud - News
*
* @author Bernhard Posselt
* @copyright 2012 Bernhard Posselt dev@bernhard-posselt.com
diff --git a/tests/unit/middleware/CORSMiddlewareTest.php b/tests/unit/middleware/CORSMiddlewareTest.php
index 7f175d820..f6baabac7 100644
--- a/tests/unit/middleware/CORSMiddlewareTest.php
+++ b/tests/unit/middleware/CORSMiddlewareTest.php
@@ -1,7 +1,7 @@
<?php
/**
- * ownCloud - App Framework
+ * ownCloud - News
*
* @author Bernhard Posselt
* @copyright 2012 Bernhard Posselt dev@bernhard-posselt.com
' href='#n341'>341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392
// SPDX-License-Identifier: GPL-3.0-or-later

#include <sys/resource.h>

#include "ebpf.h"
#include "ebpf_cgroup.h"

ebpf_cgroup_target_t *ebpf_cgroup_pids = NULL;
static void *ebpf_mapped_memory = NULL;
int send_cgroup_chart = 0;

// --------------------------------------------------------------------------------------------------------------------
// Map shared memory

/**
 * Map Shared Memory locally
 *
 * Map the shared memory for current process
 *
 * @param fd       file descriptor returned after shm_open was called.
 * @param length   length of the shared memory
 *
 * @return It returns a pointer to the region mapped on success and MAP_FAILED otherwise.
 */
static inline void *ebpf_cgroup_map_shm_locally(int fd, size_t length)
{
    void *value;

    value =  mmap(NULL, length, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
    if (!value) {
        netdata_log_error("Cannot map shared memory used between eBPF and cgroup, integration between processes won't happen");
        close(shm_fd_ebpf_cgroup);
        shm_fd_ebpf_cgroup = -1;
        shm_unlink(NETDATA_SHARED_MEMORY_EBPF_CGROUP_NAME);
    }

    return value;
}

/**
 * Unmap Shared Memory
 *
 * Unmap shared memory used to integrate eBPF and cgroup plugin
 */
void ebpf_unmap_cgroup_shared_memory()
{
    munmap(ebpf_mapped_memory, shm_ebpf_cgroup.header->body_length);
}

/**
 * Map cgroup shared memory
 *
 * Map cgroup shared memory from cgroup to plugin
 */
void ebpf_map_cgroup_shared_memory()
{
    static int limit_try = 0;
    static time_t next_try = 0;

    if (shm_ebpf_cgroup.header || limit_try > NETDATA_EBPF_CGROUP_MAX_TRIES)
        return;

    time_t curr_time = time(NULL);
    if (curr_time < next_try)
        return;

    limit_try++;
    next_try = curr_time + NETDATA_EBPF_CGROUP_NEXT_TRY_SEC;

    if (shm_fd_ebpf_cgroup < 0) {
        shm_fd_ebpf_cgroup = shm_open(NETDATA_SHARED_MEMORY_EBPF_CGROUP_NAME, O_RDWR, 0660);
        if (shm_fd_ebpf_cgroup < 0) {
            if (limit_try == NETDATA_EBPF_CGROUP_MAX_TRIES)
                netdata_log_error("Shared memory was not initialized, integration between processes won't happen.");

            return;
        }
    }

    // Map only header
    void *mapped = (netdata_ebpf_cgroup_shm_header_t *) ebpf_cgroup_map_shm_locally(shm_fd_ebpf_cgroup,
                                                                                   sizeof(netdata_ebpf_cgroup_shm_header_t));
    if (unlikely(mapped == SEM_FAILED)) {
        return;
    }
    netdata_ebpf_cgroup_shm_header_t *header = mapped;

    size_t length =  header->body_length;

    munmap(header, sizeof(netdata_ebpf_cgroup_shm_header_t));

    if (length <= ((sizeof(netdata_ebpf_cgroup_shm_header_t) + sizeof(netdata_ebpf_cgroup_shm_body_t)))) {
        return;
    }

    ebpf_mapped_memory = (void *)ebpf_cgroup_map_shm_locally(shm_fd_ebpf_cgroup, length);
    if (unlikely(ebpf_mapped_memory == MAP_FAILED)) {
        return;
    }
    shm_ebpf_cgroup.header = ebpf_mapped_memory;
    shm_ebpf_cgroup.body = ebpf_mapped_memory + sizeof(netdata_ebpf_cgroup_shm_header_t);

    shm_sem_ebpf_cgroup = sem_open(NETDATA_NAMED_SEMAPHORE_EBPF_CGROUP_NAME, O_CREAT, 0660, 1);

    if (shm_sem_ebpf_cgroup == SEM_FAILED) {
        netdata_log_error("Cannot create semaphore, integration between eBPF and cgroup won't happen");
        limit_try = NETDATA_EBPF_CGROUP_MAX_TRIES + 1;
        munmap(ebpf_mapped_memory, length);
        shm_ebpf_cgroup.header = NULL;
        shm_ebpf_cgroup.body = NULL;
        close(shm_fd_ebpf_cgroup);
        shm_fd_ebpf_cgroup = -1;
        shm_unlink(NETDATA_SHARED_MEMORY_EBPF_CGROUP_NAME);
    }
}

// --------------------------------------------------------------------------------------------------------------------
// Close and Cleanup

/**
 * Clean Specific cgroup pid
 *
 * Clean all PIDs associated with cgroup.
 *
 * @param pt structure pid on target that will have your PRs removed
 */
static inline void ebpf_clean_specific_cgroup_pids(struct pid_on_target2 *pt)
{
    while (pt) {
        struct pid_on_target2 *next_pid = pt->next;

        freez(pt);
        pt = next_pid;
    }
}

/**
 * Remove Cgroup Update Target Update List
 *
 * Remove from cgroup target and update the link list
 */
static void ebpf_remove_cgroup_target_update_list()
{
    ebpf_cgroup_target_t *next, *ect = ebpf_cgroup_pids;
    ebpf_cgroup_target_t *prev = ebpf_cgroup_pids;
    while (ect) {
        next = ect->next;
        if (!ect->updated) {
            if (ect == ebpf_cgroup_pids) {
                ebpf_cgroup_pids = next;
                prev = next;
            } else {
                prev->next = next;
            }

            ebpf_clean_specific_cgroup_pids(ect->pids);
            freez(ect);
        } else {
            prev = ect;
        }

        ect = next;
    }
}

// --------------------------------------------------------------------------------------------------------------------
// Fill variables

/**
 * Set Target Data
 *
 * Set local variable values according shared memory information.
 *
 * @param out local output variable.
 * @param ptr input from shared memory.
 */
static inline void ebpf_cgroup_set_target_data(ebpf_cgroup_target_t *out, netdata_ebpf_cgroup_shm_body_t *ptr)
{
    out->hash