added HIO_SVC_MARC_SID_FLAG_AUTO_BOUNDED
accept the second parameter bitwise-ORed with HIO_SVC_MARC_SID_FLAG_AUTO_BOUNDED in hio_svc_marc_querywithbchars. the introduction of this flag results in limiting the highest sid requestable
This commit is contained in:
parent
56decb7174
commit
f15918ef30
@ -245,10 +245,23 @@ int main (int argc, char* argv[])
|
|||||||
goto oops;
|
goto oops;
|
||||||
}
|
}
|
||||||
|
|
||||||
hio_svc_marc_querywithbchars (marc, 0, HIO_SVC_MARC_QTYPE_SELECT, "SHOW STATUS", 11, on_result, HIO_NULL);
|
hio_svc_marc_querywithbchars (marc, 4 | HIO_SVC_MARC_SID_FLAG_AUTO_BOUNDED, HIO_SVC_MARC_QTYPE_SELECT, "SHOW STATUS", 11, on_result, HIO_NULL);
|
||||||
hio_svc_marc_querywithbchars (marc, 0, HIO_SVC_MARC_QTYPE_ACTION, "DELETE FROM", 11, on_result, HIO_NULL);
|
hio_svc_marc_querywithbchars (marc, 4 | HIO_SVC_MARC_SID_FLAG_AUTO_BOUNDED, HIO_SVC_MARC_QTYPE_ACTION, "DELETE FROM", 11, on_result, HIO_NULL);
|
||||||
// hio_svc_marc_querywithbchars (marc, 0, HIO_SVC_MARC_QTYPE_SELECT, "SHOW STATUS", 11, on_result, HIO_NULL);
|
// hio_svc_marc_querywithbchars (marc, 4 | HIO_SVC_MARC_SID_FLAG_AUTO_BOUNDED, HIO_SVC_MARC_QTYPE_SELECT, "SHOW STATUS", 11, on_result, HIO_NULL);
|
||||||
hio_svc_marc_querywithbchars (marc, 0, HIO_SVC_MARC_QTYPE_ACTION, "DELETE FROM XXX", 14, on_result, HIO_NULL);
|
hio_svc_marc_querywithbchars (marc, 4 | HIO_SVC_MARC_SID_FLAG_AUTO_BOUNDED, HIO_SVC_MARC_QTYPE_ACTION, "DELETE FROM XXX", 14, on_result, HIO_NULL);
|
||||||
|
hio_svc_marc_querywithbchars (marc, 4 | HIO_SVC_MARC_SID_FLAG_AUTO_BOUNDED, HIO_SVC_MARC_QTYPE_ACTION, "DELETE FROM ZZZ", 14, on_result, HIO_NULL);
|
||||||
|
hio_svc_marc_querywithbchars (marc, 4 | HIO_SVC_MARC_SID_FLAG_AUTO_BOUNDED, HIO_SVC_MARC_QTYPE_ACTION, "DELETE FROM TTT", 14, on_result, HIO_NULL);
|
||||||
|
hio_svc_marc_querywithbchars (marc, 4 | HIO_SVC_MARC_SID_FLAG_AUTO_BOUNDED, HIO_SVC_MARC_QTYPE_ACTION, "DELETE FROM QQQ", 14, on_result, HIO_NULL);
|
||||||
|
hio_svc_marc_querywithbchars (marc, 4 | HIO_SVC_MARC_SID_FLAG_AUTO_BOUNDED, HIO_SVC_MARC_QTYPE_ACTION, "DELETE FROM RRR", 14, on_result, HIO_NULL);
|
||||||
|
hio_svc_marc_querywithbchars (marc, 4 | HIO_SVC_MARC_SID_FLAG_AUTO_BOUNDED, HIO_SVC_MARC_QTYPE_ACTION, "DELETE FROM RRR", 14, on_result, HIO_NULL);
|
||||||
|
hio_svc_marc_querywithbchars (marc, 4 | HIO_SVC_MARC_SID_FLAG_AUTO_BOUNDED, HIO_SVC_MARC_QTYPE_ACTION, "DELETE FROM RRR", 14, on_result, HIO_NULL);
|
||||||
|
hio_svc_marc_querywithbchars (marc, 4 | HIO_SVC_MARC_SID_FLAG_AUTO_BOUNDED, HIO_SVC_MARC_QTYPE_ACTION, "DELETE FROM RRR", 14, on_result, HIO_NULL);
|
||||||
|
hio_svc_marc_querywithbchars (marc, 4 | HIO_SVC_MARC_SID_FLAG_AUTO_BOUNDED, HIO_SVC_MARC_QTYPE_ACTION, "DELETE FROM RRR", 14, on_result, HIO_NULL);
|
||||||
|
hio_svc_marc_querywithbchars (marc, 4 | HIO_SVC_MARC_SID_FLAG_AUTO_BOUNDED, HIO_SVC_MARC_QTYPE_ACTION, "DELETE FROM RRR", 14, on_result, HIO_NULL);
|
||||||
|
hio_svc_marc_querywithbchars (marc, 4 | HIO_SVC_MARC_SID_FLAG_AUTO_BOUNDED, HIO_SVC_MARC_QTYPE_ACTION, "DELETE FROM RRR", 14, on_result, HIO_NULL);
|
||||||
|
hio_svc_marc_querywithbchars (marc, 10 | HIO_SVC_MARC_SID_FLAG_AUTO_BOUNDED, HIO_SVC_MARC_QTYPE_ACTION, "DELETE FROM RRR", 14, on_result, HIO_NULL);
|
||||||
|
hio_svc_marc_querywithbchars (marc, 10 | HIO_SVC_MARC_SID_FLAG_AUTO_BOUNDED, HIO_SVC_MARC_QTYPE_ACTION, "DELETE FROM RRR", 14, on_result, HIO_NULL);
|
||||||
|
hio_svc_marc_querywithbchars (marc, 10 | HIO_SVC_MARC_SID_FLAG_AUTO_BOUNDED, HIO_SVC_MARC_QTYPE_ACTION, "DELETE FROM RRR", 14, on_result, HIO_NULL);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
memset (&mi, 0, HIO_SIZEOF(mi));
|
memset (&mi, 0, HIO_SIZEOF(mi));
|
||||||
|
@ -175,6 +175,16 @@ enum hio_svc_marc_rcode_t
|
|||||||
};
|
};
|
||||||
typedef enum hio_svc_marc_rcode_t hio_svc_marc_rcode_t;
|
typedef enum hio_svc_marc_rcode_t hio_svc_marc_rcode_t;
|
||||||
|
|
||||||
|
enum hio_svc_marc_sid_flag_t
|
||||||
|
{
|
||||||
|
HIO_SVC_MARC_SID_FLAG_AUTO_BOUNDED = ((hio_oow_t)1 << (HIO_SIZEOF_OOW_T - 1)),
|
||||||
|
HIO_SVC_MARC_SID_FLAG_RESERVED_1 = ((hio_oow_t)1 << (HIO_SIZEOF_OOW_T - 2)),
|
||||||
|
HIO_SVC_MARC_SID_FLAG_RESERVED_2 = ((hio_oow_t)1 << (HIO_SIZEOF_OOW_T - 3)),
|
||||||
|
|
||||||
|
HIO_SVC_MARC_SID_FLAG_ALL = (HIO_SVC_MARC_SID_FLAG_AUTO_BOUNDED | HIO_SVC_MARC_SID_FLAG_RESERVED_1 | HIO_SVC_MARC_SID_FLAG_RESERVED_2)
|
||||||
|
};
|
||||||
|
typedef enum hio_svc_marc_sid_flag_t hio_svc_marc_sid_flag_t;
|
||||||
|
|
||||||
struct hio_svc_marc_dev_error_t
|
struct hio_svc_marc_dev_error_t
|
||||||
{
|
{
|
||||||
int mar_errcode;
|
int mar_errcode;
|
||||||
@ -269,7 +279,7 @@ static HIO_INLINE hio_t* hio_svc_marc_gethio(hio_svc_marc_t* svc) { return hio_s
|
|||||||
|
|
||||||
HIO_EXPORT int hio_svc_marc_querywithbchars (
|
HIO_EXPORT int hio_svc_marc_querywithbchars (
|
||||||
hio_svc_marc_t* marc,
|
hio_svc_marc_t* marc,
|
||||||
hio_oow_t sid,
|
hio_oow_t flagged_sid,
|
||||||
hio_svc_marc_qtype_t qtype,
|
hio_svc_marc_qtype_t qtype,
|
||||||
const hio_bch_t* qptr,
|
const hio_bch_t* qptr,
|
||||||
hio_oow_t qlen,
|
hio_oow_t qlen,
|
||||||
|
@ -57,6 +57,9 @@ struct hio_svc_marc_t
|
|||||||
sess_t* ptr;
|
sess_t* ptr;
|
||||||
hio_oow_t capa;
|
hio_oow_t capa;
|
||||||
} sess;
|
} sess;
|
||||||
|
|
||||||
|
hio_oow_t autoi;
|
||||||
|
hio_oow_t autoi2;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct sess_qry_t
|
struct sess_qry_t
|
||||||
@ -398,11 +401,76 @@ static hio_dev_mar_t* alloc_device (hio_svc_marc_t* marc, hio_oow_t sid)
|
|||||||
|
|
||||||
/* ------------------------------------------------------------------- */
|
/* ------------------------------------------------------------------- */
|
||||||
|
|
||||||
static sess_t* get_session (hio_svc_marc_t* marc, hio_oow_t sid)
|
static sess_t* get_session (hio_svc_marc_t* marc, hio_oow_t flagged_sid)
|
||||||
{
|
{
|
||||||
hio_t* hio = marc->hio;
|
hio_t* hio = marc->hio;
|
||||||
|
hio_oow_t sid;
|
||||||
sess_t* sess;
|
sess_t* sess;
|
||||||
|
|
||||||
|
sid = flagged_sid & ~HIO_SVC_MARC_SID_FLAG_ALL;
|
||||||
|
|
||||||
|
if ((flagged_sid & HIO_SVC_MARC_SID_FLAG_AUTO_BOUNDED) && marc->sess.capa > 0)
|
||||||
|
{
|
||||||
|
hio_oow_t i, ubound, mbound;
|
||||||
|
hio_oow_t unused = INVALID_SID;
|
||||||
|
|
||||||
|
/* automatic sid assignment. sid holds the largest session id that can be assigned */
|
||||||
|
ubound = marc->sess.capa;
|
||||||
|
if (sid < ubound) ubound = sid + 1;
|
||||||
|
|
||||||
|
mbound = marc->autoi;
|
||||||
|
if (mbound > ubound) mbound = ubound;
|
||||||
|
for (i = mbound; i < ubound; i++)
|
||||||
|
{
|
||||||
|
sess = &marc->sess.ptr[i];
|
||||||
|
if (sess->dev)
|
||||||
|
{
|
||||||
|
if (!get_first_session_query(sess))
|
||||||
|
{
|
||||||
|
marc->autoi = i;
|
||||||
|
sid = marc->autoi;
|
||||||
|
goto got_sid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else unused = i;
|
||||||
|
}
|
||||||
|
for (i = 0; i < mbound; i++)
|
||||||
|
{
|
||||||
|
sess = &marc->sess.ptr[i];
|
||||||
|
if (sess->dev)
|
||||||
|
{
|
||||||
|
if (!get_first_session_query(sess))
|
||||||
|
{
|
||||||
|
marc->autoi = i;
|
||||||
|
sid = marc->autoi;
|
||||||
|
goto got_sid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else unused = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (unused == INVALID_SID)
|
||||||
|
{
|
||||||
|
if (sid >= ubound)
|
||||||
|
{
|
||||||
|
marc->autoi = sid;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* TODO: more optimizations - take the one with the least enqueued queries */
|
||||||
|
marc->autoi2 = (marc->autoi2 + 1) % ubound;
|
||||||
|
marc->autoi = marc->autoi;
|
||||||
|
sid = marc->autoi2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
marc->autoi = unused;
|
||||||
|
sid = marc->autoi;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
got_sid:
|
||||||
if (sid >= marc->sess.capa)
|
if (sid >= marc->sess.capa)
|
||||||
{
|
{
|
||||||
sess_t* tmp;
|
sess_t* tmp;
|
||||||
@ -412,7 +480,7 @@ static sess_t* get_session (hio_svc_marc_t* marc, hio_oow_t sid)
|
|||||||
if (newcapa <= sid) newcapa = sid + 1;
|
if (newcapa <= sid) newcapa = sid + 1;
|
||||||
newcapa = HIO_ALIGN_POW2(newcapa, 16);
|
newcapa = HIO_ALIGN_POW2(newcapa, 16);
|
||||||
|
|
||||||
tmp = hio_reallocmem(hio, marc->sess.ptr, HIO_SIZEOF(sess_t) * newcapa);
|
tmp = (sess_t*)hio_reallocmem(hio, marc->sess.ptr, HIO_SIZEOF(sess_t) * newcapa);
|
||||||
if (HIO_UNLIKELY(!tmp)) return HIO_NULL;
|
if (HIO_UNLIKELY(!tmp)) return HIO_NULL;
|
||||||
|
|
||||||
HIO_MEMSET (&tmp[marc->sess.capa], 0, HIO_SIZEOF(sess_t) * (newcapa - marc->sess.capa));
|
HIO_MEMSET (&tmp[marc->sess.capa], 0, HIO_SIZEOF(sess_t) * (newcapa - marc->sess.capa));
|
||||||
@ -471,13 +539,13 @@ static sess_t* get_session (hio_svc_marc_t* marc, hio_oow_t sid)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int hio_svc_marc_querywithbchars (hio_svc_marc_t* marc, hio_oow_t sid, hio_svc_marc_qtype_t qtype, const hio_bch_t* qptr, hio_oow_t qlen, hio_svc_marc_on_result_t on_result, void* qctx)
|
int hio_svc_marc_querywithbchars (hio_svc_marc_t* marc, hio_oow_t flagged_sid, hio_svc_marc_qtype_t qtype, const hio_bch_t* qptr, hio_oow_t qlen, hio_svc_marc_on_result_t on_result, void* qctx)
|
||||||
{
|
{
|
||||||
hio_t* hio = marc->hio;
|
hio_t* hio = marc->hio;
|
||||||
sess_t* sess;
|
sess_t* sess;
|
||||||
sess_qry_t* sq;
|
sess_qry_t* sq;
|
||||||
|
|
||||||
sess = get_session(marc, sid);
|
sess = get_session(marc, flagged_sid);
|
||||||
if (HIO_UNLIKELY(!sess)) return -1;
|
if (HIO_UNLIKELY(!sess)) return -1;
|
||||||
|
|
||||||
sq = make_session_query(hio, qtype, qptr, qlen, qctx, on_result);
|
sq = make_session_query(hio, qtype, qptr, qlen, qctx, on_result);
|
||||||
|
Loading…
Reference in New Issue
Block a user