Skip to content

Commit dd6756e

Browse files
committed
CCBC-1662: ignore server-side notification during bootstrap
Change-Id: Ia041ede15f7254fb995af9800346797b025febff Reviewed-on: https://review.couchbase.org/c/libcouchbase/+/226180 Tested-by: Build Bot <build@couchbase.com> Reviewed-by: Sergey Avseyev <sergey.avseyev@gmail.com>
1 parent 182e08e commit dd6756e

2 files changed

Lines changed: 28 additions & 8 deletions

File tree

src/mcserver/negotiate.cc

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ using namespace lcb;
3838
static void cleanup_negotiated(SessionInfo *info);
3939
static void handle_ioerr(lcbio_CTX *ctx, lcb_STATUS err);
4040

41-
#define LOGFMT CTX_LOGFMT_PRE ",SASLREQ=%p) "
42-
#define LOGID(s) CTX_LOGID(s->ctx), (void *)s
41+
#define LOGFMT CTX_LOGFMT_PRE ",SOCK=%016" PRIx64 ",SASLREQ=%p) "
42+
#define LOGID(s) CTX_LOGID(s->ctx), ((s->ctx && s->ctx->sock) ? s->ctx->sock->id : 0), (void *)s
4343

4444
static void timeout_handler(void *arg);
4545

@@ -270,7 +270,8 @@ SessionRequestImpl::MechStatus SessionRequestImpl::set_chosen_mech(std::string &
270270
cbsasl_error_t saslerr;
271271

272272
if (mechlist.empty()) {
273-
lcb_log(LOGARGS(this, WARN), LOGFMT "Server does not support SASL (no mechanisms supported, empty list)", LOGID(this));
273+
lcb_log(LOGARGS(this, WARN), LOGFMT "Server does not support SASL (no mechanisms supported, empty list)",
274+
LOGID(this));
274275
return MECH_NOT_NEEDED;
275276
}
276277

@@ -329,7 +330,8 @@ SessionRequestImpl::MechStatus SessionRequestImpl::set_chosen_mech(std::string &
329330
info->mech.assign(chosenmech);
330331
return MECH_OK;
331332
case SASL_NOMECH:
332-
lcb_log(LOGARGS(this, WARN), LOGFMT "Server does not support SASL (no mechanisms supported, SASL_NOMECH)", LOGID(this));
333+
lcb_log(LOGARGS(this, WARN), LOGFMT "Server does not support SASL (no mechanisms supported, SASL_NOMECH)",
334+
LOGID(this));
333335
return MECH_UNAVAILABLE;
334336
default:
335337
lcb_log(LOGARGS(this, ERROR), LOGFMT "cbsasl_client_start returned %d", LOGID(this), saslerr);
@@ -772,9 +774,17 @@ void SessionRequestImpl::handle_read(lcbio_CTX *ioctx)
772774
}
773775

774776
default: {
775-
lcb_log(LOGARGS(this, ERROR), LOGFMT "Received unexpected response. OP=0x%x. RC=0x%x, completed=%d",
776-
LOGID(this), resp.opcode(), resp.status(), completed);
777-
set_error(LCB_ERR_PROTOCOL_ERROR, "Received unexpected response", &resp);
777+
if (resp.server_response()) {
778+
lcb_log(LOGARGS(this, ERROR),
779+
LOGFMT "Received unexpected response. OP=0x%x. RC=0x%x, SEQ=%u, completed=%d", LOGID(this),
780+
(int)resp.opcode(), (int)resp.status(), (int)resp.opaque(), completed);
781+
set_error(LCB_ERR_PROTOCOL_ERROR, "Received unexpected response", &resp);
782+
} else {
783+
lcb_log(LOGARGS(this, DEBUG),
784+
LOGFMT "Received unexpected message. MAGIC=0x%02x, OP=0x%x. RC=0x%x, SEQ=%u, completed=%d",
785+
LOGID(this), (int)resp.magic(), (int)resp.opcode(), (int)resp.status(), (int)resp.opaque(),
786+
completed);
787+
}
778788
break;
779789
}
780790
}

src/packetutils.h

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,16 @@ class MemcachedResponse
117117
return res.response.opcode;
118118
}
119119

120+
bool server_response() const
121+
{
122+
return res.response.magic == PROTOCOL_BINARY_ARES || res.response.magic == PROTOCOL_BINARY_RES;
123+
}
124+
125+
uint8_t magic() const
126+
{
127+
return res.response.magic;
128+
}
129+
120130
/**
121131
* Gets the CAS for the packet
122132
*/
@@ -135,7 +145,7 @@ class MemcachedResponse
135145

136146
#define FRAMING_EXTRAS_TRACING 0x00
137147
#if defined(_MSC_VER)
138-
#define __lcb_round(d) ((d) > 0.0) ? ((d) + 0.5) : ((d)-0.5)
148+
#define __lcb_round(d) ((d) > 0.0) ? ((d) + 0.5) : ((d) - 0.5)
139149
#else
140150
#define __lcb_round(d) round(d)
141151
#endif

0 commit comments

Comments
 (0)