Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(release): Sync release 24.04 feb2024 skip #1149

Merged
merged 6 commits into from
Feb 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
223 changes: 223 additions & 0 deletions .github/workflows/libzmq.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,223 @@
name: libzmq

concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true

on:
workflow_dispatch:
pull_request:
paths:
- '.github/workflows/libzmq.yml'
push:
branches:
- develop
- dev-[2-9][0-9].[0-9][0-9].x
- master
- "[2-9][0-9].[0-9][0-9].x"
paths:
- '.github/workflows/libzmq.yml'

jobs:
get-version:
uses: ./.github/workflows/get-version.yml

package-rpm:
needs: [get-version]

strategy:
fail-fast: false
matrix:
include:
- image: packaging-nfpm-alma8
distrib: el8
arch: amd64
- image: packaging-nfpm-alma9
distrib: el9
arch: amd64

runs-on: ubuntu-22.04

container:
image: ${{ vars.DOCKER_INTERNAL_REGISTRY_URL }}/${{ matrix.image }}:${{ needs.get-version.outputs.version }}
credentials:
username: ${{ secrets.DOCKER_REGISTRY_ID }}
password: ${{ secrets.DOCKER_REGISTRY_PASSWD }}

name: package ${{ matrix.distrib }}

steps:
- name: package rpm
run: |
dnf install -y wget rpmdevtools rpmlint epel-release
dnf config-manager --set-enabled crb || true # alma 9
dnf config-manager --set-enabled powertools || true # alma 8
dnf install -y asciidoc autoconf automake gcc gcc-c++ glib2-devel libbsd-devel libtool make rpm-build xmlto

cd /github/home
wget -O - https://github.com/zeromq/libzmq/archive/refs/tags/v4.3.5.tar.gz | tar zxvf -
mkdir -p /github/home/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
cp libzmq-4.3.5/packaging/redhat/zeromq.spec /github/home/rpmbuild/SPECS/
wget https://github.com/zeromq/libzmq/releases/download/v4.3.5/zeromq-4.3.5.tar.gz -O /github/home/rpmbuild/SOURCES/zeromq-4.3.5.tar.gz
rpmbuild -bb /github/home/rpmbuild/SPECS/zeromq.spec
cd -

mv /github/home/rpmbuild/RPMS/x86_64/*.rpm ./
rm -f zeromq-debugsource-*.rpm libzmq5-debuginfo-*.rpm
shell: bash

- name: cache rpm
uses: actions/cache/save@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0
with:
path: ./*.rpm
key: ${{ github.run_id }}-${{ github.sha }}-rpm-libzmq-${{ matrix.distrib }}-${{ matrix.arch }}

package-deb:
needs: [get-version]

strategy:
fail-fast: false
matrix:
include:
- image: packaging-nfpm-bullseye
distrib: bullseye
runner: ubuntu-22.04
arch: amd64
- image: packaging-nfpm-bookworm
distrib: bookworm
runner: ubuntu-22.04
arch: amd64
- image: packaging-nfpm-jammy
distrib: jammy
runner: ubuntu-22.04
arch: amd64
- image: packaging-bullseye-arm64
distrib: bullseye
runner: ["self-hosted", "collect-arm64"]
arch: arm64

runs-on: ${{ matrix.runner }}

container:
image: ${{ vars.DOCKER_INTERNAL_REGISTRY_URL }}/${{ matrix.image }}:${{ needs.get-version.outputs.version }}
credentials:
username: ${{ secrets.DOCKER_REGISTRY_ID }}
password: ${{ secrets.DOCKER_REGISTRY_PASSWD }}

name: package ${{ matrix.distrib }} ${{ matrix.arch }}

steps:
- name: package deb
run: |
apt-get update
apt-get install -y debhelper dh-autoreconf dpkg-dev libkrb5-dev libnorm-dev libpgm-dev libsodium-dev libunwind8-dev libnss3-dev libgnutls28-dev libbsd-dev pkg-config asciidoc wget xmlto
wget -O - https://github.com/zeromq/libzmq/releases/download/v4.3.5/zeromq-4.3.5.tar.gz | tar zxvf -

cd zeromq-4.3.5
./configure
make
make install
cd ..

wget -O - https://github.com/zeromq/libzmq/archive/refs/tags/v4.3.5.tar.gz | tar zxvf -
cd libzmq-4.3.5
ln -s packaging/debian
sed -Ei 's/([0-9]+.[0-9]+.[0-9]+-[0-9]+.[0-9]+)/\1~${{ matrix.distrib }}/' debian/changelog
sed -Ei 's/UNRELEASED/${{ matrix.distrib }}/' debian/changelog
dpkg-buildpackage -us -uc -nc
cd ..

rm -f libzmq5-dbg_*.deb
shell: bash

- name: cache deb
uses: actions/cache/save@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0
with:
path: ./*.deb
key: ${{ github.run_id }}-${{ github.sha }}-deb-libzmq-${{ matrix.distrib }}-${{ matrix.arch }}

deliver-rpm:
if: ${{ contains(fromJson('["testing", "unstable"]'), needs.get-version.outputs.stability) }}
needs: [get-version, package-rpm]
environment: ${{ needs.get-version.outputs.environment }}
runs-on: [self-hosted, common]
strategy:
matrix:
include:
- distrib: el8
arch: amd64
- distrib: el9
arch: amd64

name: deliver ${{ matrix.distrib }}

steps:
- name: Checkout sources
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1

- name: Publish RPM packages
uses: ./.github/actions/delivery
with:
module_name: libzmq
distrib: ${{ matrix.distrib }}
version: ${{ needs.get-version.outputs.version }}
artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }}
cache_key: ${{ github.run_id }}-${{ github.sha }}-rpm-libzmq-${{ matrix.distrib }}-${{ matrix.arch }}
stability: ${{ needs.get-version.outputs.stability }}

deliver-deb:
if: ${{ contains(fromJson('["testing", "unstable"]'), needs.get-version.outputs.stability) }}
needs: [get-version, package-deb]
environment: ${{ needs.get-version.outputs.environment }}
runs-on: [self-hosted, common]
strategy:
matrix:
include:
- distrib: bullseye
arch: amd64
- distrib: bullseye
arch: arm64
- distrib: bookworm
arch: amd64
- distrib: jammy
arch: amd64

name: deliver ${{ matrix.distrib }} ${{ matrix.arch }}

steps:
- name: Checkout sources
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1

- name: Publish DEB packages
uses: ./.github/actions/delivery
with:
module_name: libzmq
distrib: ${{ matrix.distrib }}
version: ${{ needs.get-version.outputs.version }}
artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }}
cache_key: ${{ github.run_id }}-${{ github.sha }}-deb-libzmq-${{ matrix.distrib }}-${{ matrix.arch }}
stability: ${{ needs.get-version.outputs.stability }}

promote:
needs: [get-version]
if: ${{ contains(fromJson('["stable"]'), needs.get-version.outputs.stability) && github.event_name != 'workflow_dispatch' }}
runs-on: [self-hosted, common]
strategy:
matrix:
distrib: [el8, el9, bullseye, bookworm, jammy]

steps:
- name: Checkout sources
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1

- name: Promote ${{ matrix.distrib }} to stable
uses: ./.github/actions/promote-to-stable
with:
artifactory_token: ${{ secrets.ARTIFACTORY_ACCESS_TOKEN }}
module_name: libzmq
distrib: ${{ matrix.distrib }}
major_version: ${{ needs.get-version.outputs.version }}
minor_version: ${{ needs.get-version.outputs.patch }}
stability: ${{ needs.get-version.outputs.stability }}
repository_name: standard
github_base_ref: ${{ github.base_ref }}
14 changes: 13 additions & 1 deletion broker/lua/inc/com/centreon/broker/lua/broker_event.hh
Original file line number Diff line number Diff line change
Expand Up @@ -48,13 +48,25 @@ namespace lua {
*
*/
class broker_event {
struct gc_info {
gc_info() : _broker_event_cpt(0), _last_full_gc(time(nullptr)) {}

unsigned _broker_event_cpt;
time_t _last_full_gc;
};

static std::map<const lua_State*, gc_info> _gc_info;
static std::mutex _gc_info_m;

static int l_broker_event_destructor(lua_State* L);
public:
static void broker_event_reg(lua_State* L);
static void create(lua_State* L, std::shared_ptr<io::data> e);
static void create_as_table(lua_State* L, const io::data& e);
static void lua_close(const lua_State* L);
};
} // namespace lua

}
} // namespace com::centreon::broker

#endif // !CCB_LUA_BROKER_EVENT_HH
47 changes: 46 additions & 1 deletion broker/lua/src/broker_event.cc
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
#include "com/centreon/broker/io/data.hh"
#include "com/centreon/broker/io/protobuf.hh"
#include "com/centreon/broker/mapping/entry.hh"
#include "com/centreon/broker/multiplexing/muxer.hh"
#include "com/centreon/exceptions/msg_fmt.hh"

using namespace com::centreon::broker;
Expand All @@ -32,6 +33,8 @@ static void _write_item(lua_State* L,
const google::protobuf::Message* p,
const google::protobuf::FieldDescriptor* f);

std::map<const lua_State*, broker_event::gc_info> broker_event::_gc_info;
std::mutex broker_event::_gc_info_m;
/**
* The Lua broker_event constructor
*
Expand All @@ -48,6 +51,32 @@ void broker_event::create(lua_State* L, std::shared_ptr<io::data> e) {

luaL_getmetatable(L, "broker_event");
lua_setmetatable(L, -2);
bool have_to_gc_collect = false;
{
std::lock_guard l(_gc_info_m);

/*In V2, lua stores only a userdata that contains a shared_ptr of event
* (16 bytes). So garbage collector don't see amount of memory used by
* events.
* So we need to call garbage collector ourselves to reduce memory
* consumption
* So we call at least gc every minute or
* at most every 10s if lua own more than
* com::centreon::broker::multiplexing::muxer::event_queue_max_size() events
* */
time_t now = time(nullptr);
gc_info& gc_inf = _gc_info[L];
if ((++gc_inf._broker_event_cpt > com::centreon::broker::multiplexing::
muxer::event_queue_max_size() &&
gc_inf._last_full_gc + 10 < now) ||
(gc_inf._last_full_gc + 60 < now)) {
gc_inf._last_full_gc = now;
have_to_gc_collect = true;
}
}
if (have_to_gc_collect) {
lua_gc(L, LUA_GCCOLLECT, 0);
}
}

static void _message_to_table(lua_State* L,
Expand Down Expand Up @@ -344,12 +373,18 @@ void broker_event::create_as_table(lua_State* L, const io::data& d) {
*
* @return 0
*/
static int l_broker_event_destructor(lua_State* L) {
int broker_event::l_broker_event_destructor(lua_State* L) {
void* ptr = luaL_checkudata(L, 1, "broker_event");

if (ptr) {
auto event = static_cast<std::shared_ptr<io::data>*>(ptr);
event->reset();
std::lock_guard l(_gc_info_m);

gc_info& gc_inf = _gc_info[L];
if (gc_inf._broker_event_cpt > 0) {
--gc_inf._broker_event_cpt;
}
}
return 0;
}
Expand Down Expand Up @@ -758,3 +793,13 @@ void broker_event::broker_event_reg(lua_State* L) {

lua_setglobal(L, name);
}

/**
* @brief when a lua_State is closed we clean _gc_info
*
* @param The Lua interpreter as a lua_State*
*/
void broker_event::lua_close(const lua_State* L) {
std::lock_guard l(_gc_info_m);
_gc_info.erase(L);
}
1 change: 1 addition & 0 deletions broker/lua/src/luabinding.cc
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ int32_t luabinding::stop() {
if (_L) {
retval = flush();
lua_close(_L);
broker_event::lua_close(_L);
_L = nullptr;
}
return retval;
Expand Down