Skip to content

Commit

Permalink
Remaining c api exceptions
Browse files Browse the repository at this point in the history
  • Loading branch information
erer1243 committed Jan 13, 2025
1 parent aeafeeb commit b692e80
Show file tree
Hide file tree
Showing 20 changed files with 317 additions and 285 deletions.
36 changes: 20 additions & 16 deletions common/c-api/consumerstatetable.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,33 +13,37 @@ using namespace swss;
using namespace std;
using boost::numeric_cast;

SWSSConsumerStateTable SWSSConsumerStateTable_new(SWSSDBConnector db, const char *tableName,
const int32_t *p_popBatchSize,
const int32_t *p_pri) {
int popBatchSize = p_popBatchSize ? numeric_cast<int>(*p_popBatchSize)
: TableConsumable::DEFAULT_POP_BATCH_SIZE;
int pri = p_pri ? numeric_cast<int>(*p_pri) : 0;
SWSSTry(return (SWSSConsumerStateTable) new ConsumerStateTable(
(DBConnector *)db, string(tableName), popBatchSize, pri));
SWSSResult SWSSConsumerStateTable_new(SWSSDBConnector db, const char *tableName,
const int32_t *p_popBatchSize, const int32_t *p_pri,
SWSSConsumerStateTable *outTbl) {
SWSSTry({
int popBatchSize = p_popBatchSize ? numeric_cast<int>(*p_popBatchSize)
: TableConsumable::DEFAULT_POP_BATCH_SIZE;
int pri = p_pri ? numeric_cast<int>(*p_pri) : 0;
*outTbl = (SWSSConsumerStateTable) new ConsumerStateTable(
(DBConnector *)db, string(tableName), popBatchSize, pri);
});
}

void SWSSConsumerStateTable_free(SWSSConsumerStateTable tbl) {
SWSSResult SWSSConsumerStateTable_free(SWSSConsumerStateTable tbl) {
SWSSTry(delete (ConsumerStateTable *)tbl);
}

SWSSKeyOpFieldValuesArray SWSSConsumerStateTable_pops(SWSSConsumerStateTable tbl) {
SWSSResult SWSSConsumerStateTable_pops(SWSSConsumerStateTable tbl,
SWSSKeyOpFieldValuesArray *outArr) {
SWSSTry({
deque<KeyOpFieldsValuesTuple> vkco;
((ConsumerStateTable *)tbl)->pops(vkco);
return makeKeyOpFieldValuesArray(vkco);
*outArr = makeKeyOpFieldValuesArray(vkco);
});
}

uint32_t SWSSConsumerStateTable_getFd(SWSSConsumerStateTable tbl) {
SWSSTry(return numeric_cast<uint32_t>(((ConsumerStateTable *)tbl)->getFd()));
SWSSResult SWSSConsumerStateTable_getFd(SWSSConsumerStateTable tbl, uint32_t *outFd) {
SWSSTry(*outFd = numeric_cast<uint32_t>(((ConsumerStateTable *)tbl)->getFd()));
}

SWSSSelectResult SWSSConsumerStateTable_readData(SWSSConsumerStateTable tbl, uint32_t timeout_ms,
uint8_t interrupt_on_signal) {
SWSSTry(return selectOne((ConsumerStateTable *)tbl, timeout_ms, interrupt_on_signal));
SWSSResult SWSSConsumerStateTable_readData(SWSSConsumerStateTable tbl, uint32_t timeout_ms,
uint8_t interrupt_on_signal,
SWSSSelectResult *outResult) {
SWSSTry(*outResult = selectOne((ConsumerStateTable *)tbl, timeout_ms, interrupt_on_signal));
}
21 changes: 11 additions & 10 deletions common/c-api/consumerstatetable.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#define SWSS_COMMON_C_API_CONSUMERSTATETABLE_H

#include "dbconnector.h"
#include "result.h"
#include "util.h"

#ifdef __cplusplus
Expand All @@ -12,25 +13,25 @@ extern "C" {

typedef struct SWSSConsumerStateTableOpaque *SWSSConsumerStateTable;

// Pass NULL for popBatchSize and/or pri to use the default values
SWSSConsumerStateTable SWSSConsumerStateTable_new(SWSSDBConnector db, const char *tableName,
const int32_t *popBatchSize, const int32_t *pri);
SWSSResult SWSSConsumerStateTable_new(SWSSDBConnector db, const char *tableName,
const int32_t *popBatchSize, const int32_t *pri,
SWSSConsumerStateTable *outTbl);

void SWSSConsumerStateTable_free(SWSSConsumerStateTable tbl);
SWSSResult SWSSConsumerStateTable_free(SWSSConsumerStateTable tbl);

// Result array and all of its members must be freed using free()
SWSSKeyOpFieldValuesArray SWSSConsumerStateTable_pops(SWSSConsumerStateTable tbl);
SWSSResult SWSSConsumerStateTable_pops(SWSSConsumerStateTable tbl, SWSSKeyOpFieldValuesArray *outArr);

// Return the underlying fd for polling/selecting on.
// Callers must NOT read/write on fd, it may only be used for epoll or similar.
// Outputs the underlying fd for polling/selecting on.
// Callers must NOT read/write on the fd, it may only be used for epoll or similar.
// After the fd becomes readable, SWSSConsumerStateTable_readData must be used to
// reset the fd and read data into internal data structures.
uint32_t SWSSConsumerStateTable_getFd(SWSSConsumerStateTable tbl);
SWSSResult SWSSConsumerStateTable_getFd(SWSSConsumerStateTable tbl, uint32_t *outFd);

// Block until data is available to read or until a timeout elapses.
// A timeout of 0 means the call will return immediately.
SWSSSelectResult SWSSConsumerStateTable_readData(SWSSConsumerStateTable tbl, uint32_t timeout_ms,
uint8_t interrupt_on_signal);
SWSSResult SWSSConsumerStateTable_readData(SWSSConsumerStateTable tbl, uint32_t timeout_ms,
uint8_t interrupt_on_signal, SWSSSelectResult *outResult);

#ifdef __cplusplus
}
Expand Down
31 changes: 16 additions & 15 deletions common/c-api/producerstatetable.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,44 +10,45 @@
using namespace swss;
using namespace std;

SWSSProducerStateTable SWSSProducerStateTable_new(SWSSDBConnector db, const char *tableName) {
SWSSTry(return (SWSSProducerStateTable) new ProducerStateTable((DBConnector *)db,
string(tableName)));
SWSSResult SWSSProducerStateTable_new(SWSSDBConnector db, const char *tableName,
SWSSProducerStateTable *outTbl) {
SWSSTry(*outTbl = (SWSSProducerStateTable) new ProducerStateTable((DBConnector *)db,
string(tableName)));
}

void SWSSProducerStateTable_free(SWSSProducerStateTable tbl) {
SWSSResult SWSSProducerStateTable_free(SWSSProducerStateTable tbl) {
SWSSTry(delete ((ProducerStateTable *)tbl));
}

void SWSSProducerStateTable_setBuffered(SWSSProducerStateTable tbl, uint8_t buffered) {
SWSSTry(((ProducerStateTable *)tbl)->setBuffered((bool)buffered))
SWSSResult SWSSProducerStateTable_setBuffered(SWSSProducerStateTable tbl, uint8_t buffered) {
SWSSTry(((ProducerStateTable *)tbl)->setBuffered((bool)buffered));
}

void SWSSProducerStateTable_set(SWSSProducerStateTable tbl, const char *key,
SWSSFieldValueArray values) {
SWSSResult SWSSProducerStateTable_set(SWSSProducerStateTable tbl, const char *key,
SWSSFieldValueArray values) {
SWSSTry(((ProducerStateTable *)tbl)->set(string(key), takeFieldValueArray(std::move(values))));
}

void SWSSProducerStateTable_del(SWSSProducerStateTable tbl, const char *key) {
SWSSResult SWSSProducerStateTable_del(SWSSProducerStateTable tbl, const char *key) {
SWSSTry(((ProducerStateTable *)tbl)->del(string(key)));
}

void SWSSProducerStateTable_flush(SWSSProducerStateTable tbl) {
SWSSResult SWSSProducerStateTable_flush(SWSSProducerStateTable tbl) {
SWSSTry(((ProducerStateTable *)tbl)->flush());
}

int64_t SWSSProducerStateTable_count(SWSSProducerStateTable tbl) {
SWSSTry(return ((ProducerStateTable *)tbl)->count());
SWSSResult SWSSProducerStateTable_count(SWSSProducerStateTable tbl, int64_t *outCount) {
SWSSTry(*outCount = ((ProducerStateTable *)tbl)->count());
}

void SWSSProducerStateTable_clear(SWSSProducerStateTable tbl) {
SWSSResult SWSSProducerStateTable_clear(SWSSProducerStateTable tbl) {
SWSSTry(((ProducerStateTable *)tbl)->clear());
}

void SWSSProducerStateTable_create_temp_view(SWSSProducerStateTable tbl) {
SWSSResult SWSSProducerStateTable_create_temp_view(SWSSProducerStateTable tbl) {
SWSSTry(((ProducerStateTable *)tbl)->create_temp_view());
}

void SWSSProducerStateTable_apply_temp_view(SWSSProducerStateTable tbl) {
SWSSResult SWSSProducerStateTable_apply_temp_view(SWSSProducerStateTable tbl) {
SWSSTry(((ProducerStateTable *)tbl)->apply_temp_view());
}
24 changes: 13 additions & 11 deletions common/c-api/producerstatetable.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#define SWSS_COMMON_C_API_PRODUCERSTATETABLE_H

#include "dbconnector.h"
#include "result.h"
#include "util.h"

#ifdef __cplusplus
Expand All @@ -11,26 +12,27 @@ extern "C" {
#include <stdint.h>

typedef struct SWSSProducerStateTableOpaque *SWSSProducerStateTable;
SWSSResult SWSSProducerStateTable_new(SWSSDBConnector db, const char *tableName,
SWSSProducerStateTable *outTbl);

SWSSProducerStateTable SWSSProducerStateTable_new(SWSSDBConnector db, const char *tableName);
SWSSResult SWSSProducerStateTable_free(SWSSProducerStateTable tbl);

void SWSSProducerStateTable_free(SWSSProducerStateTable tbl);
SWSSResult SWSSProducerStateTable_setBuffered(SWSSProducerStateTable tbl, uint8_t buffered);

void SWSSProducerStateTable_setBuffered(SWSSProducerStateTable tbl, uint8_t buffered);
SWSSResult SWSSProducerStateTable_set(SWSSProducerStateTable tbl, const char *key,
SWSSFieldValueArray values);

void SWSSProducerStateTable_set(SWSSProducerStateTable tbl, const char *key, SWSSFieldValueArray values);
SWSSResult SWSSProducerStateTable_del(SWSSProducerStateTable tbl, const char *key);

void SWSSProducerStateTable_del(SWSSProducerStateTable tbl, const char *key);
SWSSResult SWSSProducerStateTable_flush(SWSSProducerStateTable tbl);

void SWSSProducerStateTable_flush(SWSSProducerStateTable tbl);
SWSSResult SWSSProducerStateTable_count(SWSSProducerStateTable tbl, int64_t *outCount);

int64_t SWSSProducerStateTable_count(SWSSProducerStateTable tbl);
SWSSResult SWSSProducerStateTable_clear(SWSSProducerStateTable tbl);

void SWSSProducerStateTable_clear(SWSSProducerStateTable tbl);
SWSSResult SWSSProducerStateTable_create_temp_view(SWSSProducerStateTable tbl);

void SWSSProducerStateTable_create_temp_view(SWSSProducerStateTable tbl);

void SWSSProducerStateTable_apply_temp_view(SWSSProducerStateTable tbl);
SWSSResult SWSSProducerStateTable_apply_temp_view(SWSSProducerStateTable tbl);

#ifdef __cplusplus
}
Expand Down
39 changes: 21 additions & 18 deletions common/c-api/subscriberstatetable.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,34 +14,37 @@ using namespace swss;
using namespace std;
using boost::numeric_cast;

SWSSSubscriberStateTable SWSSSubscriberStateTable_new(SWSSDBConnector db, const char *tableName,
const int32_t *p_popBatchSize,
const int32_t *p_pri) {
int popBatchSize = p_popBatchSize ? numeric_cast<int>(*p_popBatchSize)
: TableConsumable::DEFAULT_POP_BATCH_SIZE;
int pri = p_pri ? numeric_cast<int>(*p_pri) : 0;
SWSSTry(return (SWSSSubscriberStateTable) new SubscriberStateTable(
(DBConnector *)db, string(tableName), popBatchSize, pri));
SWSSResult SWSSSubscriberStateTable_new(SWSSDBConnector db, const char *tableName,
const int32_t *p_popBatchSize, const int32_t *p_pri,
SWSSSubscriberStateTable *outTbl) {
SWSSTry({
int popBatchSize = p_popBatchSize ? numeric_cast<int>(*p_popBatchSize)
: TableConsumable::DEFAULT_POP_BATCH_SIZE;
int pri = p_pri ? numeric_cast<int>(*p_pri) : 0;
*outTbl = (SWSSSubscriberStateTable) new SubscriberStateTable(
(DBConnector *)db, string(tableName), popBatchSize, pri);
});
}

void SWSSSubscriberStateTable_free(SWSSSubscriberStateTable tbl) {
delete (SubscriberStateTable *)tbl;
SWSSResult SWSSSubscriberStateTable_free(SWSSSubscriberStateTable tbl) {
SWSSTry(delete (SubscriberStateTable *)tbl);
}

SWSSKeyOpFieldValuesArray SWSSSubscriberStateTable_pops(SWSSSubscriberStateTable tbl) {
SWSSResult SWSSSubscriberStateTable_pops(SWSSSubscriberStateTable tbl,
SWSSKeyOpFieldValuesArray *outArr) {
SWSSTry({
deque<KeyOpFieldsValuesTuple> vkco;
((SubscriberStateTable *)tbl)->pops(vkco);
return makeKeyOpFieldValuesArray(vkco);
*outArr = makeKeyOpFieldValuesArray(vkco);
});
}

uint32_t SWSSSubscriberStateTable_getFd(SWSSSubscriberStateTable tbl) {
SWSSTry(return numeric_cast<uint32_t>(((SubscriberStateTable *)tbl)->getFd()));
SWSSResult SWSSSubscriberStateTable_getFd(SWSSSubscriberStateTable tbl, uint32_t *outFd) {
SWSSTry(*outFd = numeric_cast<uint32_t>(((SubscriberStateTable *)tbl)->getFd()));
}

SWSSSelectResult SWSSSubscriberStateTable_readData(SWSSSubscriberStateTable tbl,
uint32_t timeout_ms,
uint8_t interrupt_on_signal) {
SWSSTry(return selectOne((SubscriberStateTable *)tbl, timeout_ms, interrupt_on_signal));
SWSSResult SWSSSubscriberStateTable_readData(SWSSSubscriberStateTable tbl, uint32_t timeout_ms,
uint8_t interrupt_on_signal,
SWSSSelectResult *outResult) {
SWSSTry(*outResult = selectOne((SubscriberStateTable *)tbl, timeout_ms, interrupt_on_signal));
}
26 changes: 14 additions & 12 deletions common/c-api/subscriberstatetable.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#define SWSS_COMMON_C_API_SUBSCRIBERSTATETABLE_H

#include "dbconnector.h"
#include "result.h"
#include "util.h"

#ifdef __cplusplus
Expand All @@ -12,27 +13,28 @@ extern "C" {

typedef struct SWSSSubscriberStateTableOpaque *SWSSSubscriberStateTable;

// Pass NULL for popBatchSize and/or pri to use the default values
SWSSSubscriberStateTable SWSSSubscriberStateTable_new(SWSSDBConnector db, const char *tableName,
const int32_t *popBatchSize,
const int32_t *pri);
SWSSResult SWSSSubscriberStateTable_new(SWSSDBConnector db, const char *tableName,
const int32_t *popBatchSize, const int32_t *pri,
SWSSSubscriberStateTable *outTbl);

void SWSSSubscriberStateTable_free(SWSSSubscriberStateTable tbl);
// Frees the SubscriberStateTable
SWSSResult SWSSSubscriberStateTable_free(SWSSSubscriberStateTable tbl);

// Result array and all of its members must be freed using free()
SWSSKeyOpFieldValuesArray SWSSSubscriberStateTable_pops(SWSSSubscriberStateTable tbl);
SWSSResult SWSSSubscriberStateTable_pops(SWSSSubscriberStateTable tbl,
SWSSKeyOpFieldValuesArray *outArr);

// Return the underlying fd for polling/selecting on.
// Callers must NOT read/write on fd, it may only be used for epoll or similar.
// Outputs the underlying fd for polling/selecting on.
// Callers must NOT read/write on the fd, it may only be used for epoll or similar.
// After the fd becomes readable, SWSSSubscriberStateTable_readData must be used to
// reset the fd and read data into internal data structures.
uint32_t SWSSSubscriberStateTable_getFd(SWSSSubscriberStateTable tbl);
SWSSResult SWSSSubscriberStateTable_getFd(SWSSSubscriberStateTable tbl, uint32_t *outFd);

// Block until data is available to read or until a timeout elapses.
// A timeout of 0 means the call will return immediately.
SWSSSelectResult SWSSSubscriberStateTable_readData(SWSSSubscriberStateTable tbl,
uint32_t timeout_ms,
uint8_t interrupt_on_sugnal);
SWSSResult SWSSSubscriberStateTable_readData(SWSSSubscriberStateTable tbl, uint32_t timeout_ms,
uint8_t interrupt_on_signal,
SWSSSelectResult *outResult);

#ifdef __cplusplus
}
Expand Down
40 changes: 21 additions & 19 deletions common/c-api/table.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,63 +9,65 @@
using namespace swss;
using namespace std;

SWSSTable SWSSTable_new(SWSSDBConnector db, const char *tableName) {
SWSSTry(return (SWSSTable) new Table((DBConnector *)db, string(tableName)));
SWSSResult SWSSTable_new(SWSSDBConnector db, const char *tableName, SWSSTable *outTbl) {
SWSSTry(*outTbl = (SWSSTable) new Table((DBConnector *)db, string(tableName)));
}

void SWSSTable_free(SWSSTable tbl) {
SWSSResult SWSSTable_free(SWSSTable tbl) {
SWSSTry(delete (Table *)tbl);
}

int8_t SWSSTable_get(SWSSTable tbl, const char *key, SWSSFieldValueArray *outValues) {
SWSSResult SWSSTable_get(SWSSTable tbl, const char *key, SWSSFieldValueArray *outValues,
int8_t *outExists) {
SWSSTry({
vector<FieldValueTuple> fvs;
bool exists = ((Table *)tbl)->get(string(key), fvs);
if (exists) {
*outValues = makeFieldValueArray(fvs);
return 1;
*outExists = 1;
} else {
return 0;
*outExists = 0;
}
});
}

int8_t SWSSTable_hget(SWSSTable tbl, const char *key, const char *field, SWSSString *outValue) {
SWSSResult SWSSTable_hget(SWSSTable tbl, const char *key, const char *field, SWSSString *outValue,
int8_t *outExists) {
SWSSTry({
string s;
bool exists = ((Table *)tbl)->hget(string(key), string(field), s);
if (exists) {
*outValue = makeString(move(s));
return 1;
*outExists = 1;
} else {
return 0;
*outExists = 0;
}
});
}

void SWSSTable_set(SWSSTable tbl, const char *key, SWSSFieldValueArray values) {
SWSSResult SWSSTable_set(SWSSTable tbl, const char *key, SWSSFieldValueArray values) {
SWSSTry({
vector<FieldValueTuple> fvs = takeFieldValueArray(values);
((Table *)tbl)->set(string(key), fvs);
});
}

void SWSSTable_hset(SWSSTable tbl, const char *key, const char *field, SWSSStrRef value) {
SWSSTry({ ((Table *)tbl)->hset(string(key), string(field), takeStrRef(value)); });
SWSSResult SWSSTable_hset(SWSSTable tbl, const char *key, const char *field, SWSSStrRef value) {
SWSSTry(((Table *)tbl)->hset(string(key), string(field), takeStrRef(value)));
}

void SWSSTable_del(SWSSTable tbl, const char *key) {
SWSSTry({ ((Table *)tbl)->del(string(key)); });
SWSSResult SWSSTable_del(SWSSTable tbl, const char *key) {
SWSSTry(((Table *)tbl)->del(string(key)));
}

void SWSSTable_hdel(SWSSTable tbl, const char *key, const char *field) {
SWSSTry({ ((Table *)tbl)->hdel(string(key), string(field)); });
SWSSResult SWSSTable_hdel(SWSSTable tbl, const char *key, const char *field) {
SWSSTry(((Table *)tbl)->hdel(string(key), string(field)));
}

SWSSStringArray SWSSTable_getKeys(SWSSTable tbl) {
SWSSResult SWSSTable_getKeys(SWSSTable tbl, SWSSStringArray *outKeys) {
SWSSTry({
vector<string> keys;
((Table *)tbl)->getKeys(keys);
return makeStringArray(move(keys));
})
*outKeys = makeStringArray(move(keys));
});
}
Loading

0 comments on commit b692e80

Please sign in to comment.