[SCM] Samba Shared Repository - branch v4-7-stable updated
Karolin Seeger
kseeger at samba.org
Mon Aug 27 08:07:07 UTC 2018
The branch, v4-7-stable has been updated
via 2ec3c4d VERSION: Disable GIT_SNAPSHOT for the 4.7.10 release.
via eb1028b WHATSNEW: Add release notes for Samba 4.7.10.
via b21740a torture: Demonstrate the invalid lock order panic
via 8ef80a0 vfs_fruit: Fix a leak of "br_lck"
via a73d973 selftest: Load time_audit and full_audit modules for all tests
via 0470afa s3: vfs: time_audit: fix handling of token_blob in smb_time_audit_offload_read_recv()
via a329764 g_lock: Fix lock upgrades
via cc4eed2 torture3: Extend the g_lock6 test to also cover upgrades
via 72a4177 torture3: add LOCAL-G-LOCK6 test
via 50b081a selftest: subunithelper needs to follow the subunit spec more closely
via 9dcded3 unittests.lib_util_modules: test module probe with "skel", not "unix"
via cfcee58 ctdb: add expiry test for ctdb_mutex_ceph_rados_helper
via 0056094 ctdb_mutex_ceph_rados_helper: fix deadlock via lock renewals
via 3ec4c73 ctdb_mutex_ceph_rados_helper: rename timer_ev to ppid_timer_ev
via 05295db ctdb_mutex_ceph_rados_helper: use talloc destructor for cleanup
via 8c16413 ctdb_mutex_ceph_rados_helper: Set SIGINT signal handler
via a18bcf2 ctdb/build: link ctdb_mutex_ceph_rados_helper against ceph-common
via fe6886e VERSION: Bump version up to 4.7.10.
via 764141d Merge tag 'samba-4.7.9' into v4-7-test
via a431bdf s3: smbd: Fix AIX sendfile() for SMB2. Ensure we don't spin on EAGAIN.
via 7bf1568 s3: smbd: Fix FreeBSD sendfile() for SMB2. Ensure we don't spin on EAGAIN.
via adb7d6a s3: smbd: Fix HPUX sendfile() for SMB2. Ensure we don't spin on EAGAIN.
via 2c58fbd s3: smbd: Fix Solaris sendfile() for SMB2. Ensure we don't spin on EAGAIN.
via c166fa0 s3: smbd: Fix Linux sendfile() for SMB2. Ensure we don't spin on EAGAIN.
via 2bc9c4d dns wildcards: fix BUG 13536
via c6d9862 dns wildcards: tests to confirm BUG 13536
via 066ba51 s3: smbd: fix path check in smbd_smb2_create_durable_lease_check()
via 0c37304 s4: torture: run test_durable_v2_open_reopen2_lease() in a subdirectory
via 80c7e28 s3: libsmbclient: Fix cli_splice() fallback when reading less than a complete file.
via a7783f5 s3: torture: Test SMB1 cli_splice() fallback path when doing a non-full file splice.
via 6cf5809 docs/vfs_ceph: add CTDB_SAMBA_SKIP_SHARE_CHECK=yes caveat
via be42bf4 vfs_ceph: don't lie about flock support
via 5bfa46c ldb: Refuse to build Samba against a newer minor version of ldb
via 7658ffc samba-tool trust: support discovery via netr_GetDcName
via a500e04 s3:selftest: run rpc.lsa.lookupsids also with explicit [smb1] and [smb2]
via 3aaaeb9 s4:librpc: autonegotiate SMB1/2/3
via 882db91 python/tests: use explicit "client ipc max protocol = NT1" for samba.tests.net_join_no_spnego
via 80a0c49 tests/auth_log: Permit SMB2 service description if empty binding is used for kerberos authentication
via 0af5606 s4:libcli: add smb_connect_nego_{send,recv}()
via faa5c60 s4:libcli: allow a fallback to NTLMSSP if SPNEGO is not supported locally
via 73f0518 s4:libcli: add fallback_to_anonymous to smb2_connect_send()
via b2e0a78 s4:libcli: allow passing an already negotiated connection to smb2_connect_send()
via 384a61f s4:libcli: split out smb2_connect_session_start()
via 630b5b9 s4:libcli: add smb2_transport_raw_init()
via 139ee19 s4:libcli: allow passing an already negotiated connection to smb_composite_connect()
via 5bed1ef s4:libcli: use talloc_zero() for struct smb_composite_connect in fetchfile.c
via 7ee0293 s4:libcli: add smbcli_transport_raw_init()
via b2a3582 s4:libcli: split out smb_raw_negotiate_fill_transport()
via 3f03c9a librpc: add binding handle support for [smb1]
via 5260dbc s3: smbd: always set vuid in check_user_ok()
via 50e4615 s3: smbd/durable: remove dev and inode check from vfs_default_durable_reconnect_check_stat()
via 449d166 libsmbclient: Initialize written in cli_splice_fallback()
via 956d7c7 libsmbclient: Initialize written value before use.
via 6699ce8 lib: smb_threads: fix access before init bug
via c93357b python: pysmbd: Additional error path leak fix.
via ab45387 s3:smbd: don't allow renaming basefile if streams are open
via 279fa62 s3:locking: add file_has_open_streams()
via 2da420e s3:smbd: add private option NTCREATEX_OPTIONS_PRIVATE_STREAM_BASEOPEN
via ab32e7a s4:torture/vfs/fruit: adjust test testing basefile rename to expect failure
via 7d0b1fd s4:torture/smb2/streams: try to rename basefile while is has open streams
via 7f84f9f selftest: run smb2.streams tests against a share with vfs_streams_xattr
via 0a3ba68 vfs_fruit: delete 0 byte size streams if AAPL is enabled
via 1a500df s4:torture: test setting EOF of a stream to 0 with enabled AAPL extensions
via c5ed2b3 s4:torture/vfs/fruit: decrease large resource fork size in test from 1 GB to 64 MB
via 58403cb s3/notifyd.c: Rename CTDB_BROADCAST_VNNMAP to CTDB_BROADCAST_ACTIVE.
via 516448f ctdb-tests: Avoid segfault by initializing logging
via bea8c19 ctdb-tests: Avoid segfault by initializing logging
via 5f0ba9c ctdb-pmda: Use modified API in pcp library 4.0
via 66d36b3 socket_wrapper: Add missing dependency on tirpc
via 7fd58cb ctdb-daemon: Only consider client ID for local database attach
via b521f79 ctdb-docs: Fix the documentation for VNN map
via 99d490d ctdb-server: Rename CTDB_BROADCAST_VNNMAP -> CTDB_BROADCAST_ACTIVE
via 9352dd5 ctdb-tests: Add a simple test for database traverses
via 93c09bd ctdb-tests: Add check for non-lmaster node status in integration tests
via e728f9f s4:kcc: Add a NULL check before qsort()
via 84bac58 s3:smbget: Fix buffer truncation issues with gcc8
via e0a7415 s3:registry: Fix buffer truncation issues issues with gcc8
via ce0b090 samdb: Fix build error with gcc8
via bc6a072 s3-winbindd: remove unused fill_domain_username()
via 6fa0630 s3-winbindd: use fill_domain_username_talloc() in winbind.
via 7b6a1de s3:libnet: Fix format-truncation warning in samsync_ldif
via 6aaf3a8 lib: Fix array size in audit_logging
via aab4aca s4:ntvfs: Fix string copy of share_name
via 461bd25 lib:util: Fix parameter aliasing in tfork test
via 99ab2e2 s3:passdb: Fix size of ascii_p16
via 992faaa s3:lib: Use memcpy() in escape_ldap_string()
via 7cf1573 s4:torture: Use strlcpy() in gen_name()
via c4a2cd3 s3-utils: fix format-truncation in smbpasswd
via 911417a s4-torture: fix format-truncation warning in smb2 session tests.
via c146fd8 s3-printing: fix format-truncation in print_queue_update()
via 454f425 heimdal: lib/krb5: do not fail set_config_files due to parse error
via cdf16fd krb5_wrap: fix keep_old_entries logic for older kerberos libraries
via 0b95014 VERSION: Bump version up to 4.7.9...
from 3e5da7e VERSION: Disable GIT_SNAPSHOT for the 4.7.9 release.
https://git.samba.org/?p=samba.git;a=shortlog;h=v4-7-stable
- Log -----------------------------------------------------------------
-----------------------------------------------------------------------
Summary of changes:
VERSION | 2 +-
WHATSNEW.txt | 109 ++++++++-
auth/auth_log.c | 2 +-
ctdb/doc/ctdb.1.xml | 7 +-
ctdb/include/ctdb_private.h | 7 +-
ctdb/protocol/protocol.h | 2 +-
ctdb/protocol/protocol_debug.c | 4 +-
ctdb/server/ctdb_control.c | 36 ++-
ctdb/server/ctdb_ltdb_server.c | 21 +-
ctdb/server/ctdb_server.c | 16 +-
ctdb/server/ctdb_traverse.c | 4 +-
ctdb/tests/scripts/integration.bash | 1 +
ctdb/tests/simple/79_volatile_db_traverse.sh | 94 ++++++++
ctdb/tests/src/ctdb_takeover_tests.c | 2 +
ctdb/tests/src/fetch_loop.c | 3 +
ctdb/tests/src/fetch_loop_key.c | 3 +
ctdb/tests/src/fetch_readonly.c | 3 +
ctdb/tests/src/fetch_readonly_loop.c | 3 +
ctdb/tests/src/fetch_ring.c | 3 +
ctdb/tests/src/g_lock_loop.c | 4 +-
ctdb/tests/src/message_ring.c | 3 +
ctdb/tests/src/transaction_loop.c | 3 +
ctdb/tests/src/update_record.c | 3 +
ctdb/tests/src/update_record_persistent.c | 3 +
ctdb/utils/ceph/ctdb_mutex_ceph_rados_helper.c | 200 ++++++++++++----
ctdb/utils/ceph/test_ceph_rados_reclock.sh | 57 ++++-
ctdb/utils/pmda/pmda_ctdb.c | 30 ++-
ctdb/wscript | 17 +-
docs-xml/manpages/vfs_ceph.8.xml | 19 ++
lib/krb5_wrap/krb5_samba.c | 2 +-
lib/ldb/wscript | 32 ++-
lib/socket_wrapper/wscript | 2 +-
lib/util/smb_threads.h | 3 +
lib/util/tests/tfork.c | 7 +-
librpc/rpc/binding.c | 1 +
librpc/rpc/rpc_common.h | 2 +
python/samba/netcmd/domain.py | 26 +-
python/samba/tests/auth_log.py | 28 ++-
python/samba/tests/dns_wildcard.py | 48 ++++
python/samba/tests/net_join_no_spnego.py | 2 +
selftest/knownfail | 3 +
selftest/subunithelper.py | 3 +-
selftest/target/Samba3.pm | 12 +-
source3/include/smb.h | 3 +
source3/lib/g_lock.c | 4 +
source3/lib/ldap_escape.c | 2 +-
source3/lib/sendfile.c | 293 ++++++++++++++++++++---
source3/libnet/libnet_samsync_ldif.c | 3 +-
source3/libsmb/clireadwrite.c | 6 +-
source3/libsmb/libsmb_file.c | 2 +-
source3/locking/locking.c | 31 +++
source3/locking/proto.h | 1 +
source3/modules/vfs_ceph.c | 11 +-
source3/modules/vfs_fruit.c | 27 ++-
source3/modules/vfs_time_audit.c | 12 +-
source3/passdb/pdb_smbpasswd.c | 2 +-
source3/printing/printing.c | 2 +-
source3/registry/reg_perfcount.c | 12 +-
source3/selftest/tests.py | 12 +-
source3/smbd/durable.c | 24 --
source3/smbd/notifyd/notifyd.c | 4 +-
source3/smbd/open.c | 7 +-
source3/smbd/pysmbd.c | 1 +
source3/smbd/reply.c | 4 +
source3/smbd/smb2_create.c | 16 +-
source3/smbd/uid.c | 2 +
source3/torture/proto.h | 1 +
source3/torture/test_g_lock.c | 168 +++++++++++++
source3/torture/torture.c | 154 ++++++++++++
source3/utils/smbget.c | 2 +-
source3/utils/smbpasswd.c | 49 ++--
source3/winbindd/wb_getpwsid.c | 15 +-
source3/winbindd/wb_query_user_list.c | 9 +-
source3/winbindd/winbindd_group.c | 12 +-
source3/winbindd/winbindd_list_groups.c | 14 +-
source3/winbindd/winbindd_pam.c | 13 +-
source3/winbindd/winbindd_proto.h | 1 -
source3/winbindd/winbindd_util.c | 20 --
source4/dns_server/dnsserver_common.c | 1 +
source4/dsdb/kcc/kcc_topology.c | 5 +
source4/dsdb/samdb/ldb_modules/samldb.c | 2 +-
source4/heimdal/lib/krb5/config_file.c | 4 +-
source4/heimdal/lib/krb5/context.c | 3 +-
source4/libcli/raw/clitransport.c | 44 ++++
source4/libcli/raw/clitree.c | 1 +
source4/libcli/raw/rawnegotiate.c | 74 +++---
source4/libcli/smb2/connect.c | 69 +++++-
source4/libcli/smb2/session.c | 35 ++-
source4/libcli/smb2/transport.c | 35 +++
source4/libcli/smb_composite/connect.c | 48 +++-
source4/libcli/smb_composite/connect_nego.c | 209 ++++++++++++++++
source4/libcli/smb_composite/fetchfile.c | 2 +-
source4/libcli/smb_composite/smb_composite.h | 23 ++
source4/libcli/wscript_build | 20 +-
source4/librpc/rpc/dcerpc_connect.c | 257 ++++++++++----------
source4/ntvfs/cifs/vfs_cifs.c | 1 +
source4/ntvfs/ipc/rap_server.c | 9 +-
source4/torture/basic/mangle_test.c | 2 +-
source4/torture/smb2/durable_v2_open.c | 11 +-
source4/torture/smb2/session.c | 2 +-
source4/torture/smb2/streams.c | 82 +++++++
source4/torture/vfs/fruit.c | 315 +++++++++++++++++++++++--
testsuite/unittests/test_lib_util_modules.c | 2 +-
103 files changed, 2502 insertions(+), 525 deletions(-)
create mode 100755 ctdb/tests/simple/79_volatile_db_traverse.sh
create mode 100644 source4/libcli/smb_composite/connect_nego.c
Changeset truncated at 500 lines:
diff --git a/VERSION b/VERSION
index 8348485..0f3c07e 100644
--- a/VERSION
+++ b/VERSION
@@ -25,7 +25,7 @@
########################################################
SAMBA_VERSION_MAJOR=4
SAMBA_VERSION_MINOR=7
-SAMBA_VERSION_RELEASE=9
+SAMBA_VERSION_RELEASE=10
########################################################
# If a official release has a serious bug #
diff --git a/WHATSNEW.txt b/WHATSNEW.txt
index c812417..98fcfe5 100644
--- a/WHATSNEW.txt
+++ b/WHATSNEW.txt
@@ -1,3 +1,108 @@
+ ==============================
+ Release Notes for Samba 4.7.10
+ August 27, 2018
+ ==============================
+
+
+This is the latest stable release of the Samba 4.7 release series.
+
+
+Changes since 4.7.9:
+--------------------
+
+o Jeremy Allison <jra at samba.org>
+ * BUG 13474: python: pysmbd: Additional error path leak fix.
+ * BUG 13511: libsmbclient: Initialize written value before use.
+ * BUG 13527: s3: libsmbclient: Fix cli_splice() fallback when reading less
+ than a complete file.
+ * BUG 13537: Using "sendfile = yes" with SMB2 can cause CPU spin.
+
+o Jeffrey Altman <jaltman at secure-endpoints.com>
+ * BUG 11573: heimdal: lib/krb5: Do not fail set_config_files due to parse
+ error.
+
+o Andrew Bartlett <abartlet at samba.org>
+ * BUG 13519: ldb: Refuse to build Samba against a newer minor version of
+ ldb.
+
+o Bailey Berro <baileyberro at chromium.org>
+ * BUG 13511: libsmbclient: Initialize written in cli_splice_fallback().
+
+o Alexander Bokovoy <ab at samba.org>
+ * BUG 13538: samba-tool trust: Support discovery via netr_GetDcName.
+
+o Ralph Boehme <slow at samba.org>
+ * BUG 13318: Durable Handles reconnect fails in a cluster when the cluster
+ fs uses different device ids.
+ * BUG 13351: s3: smbd: Always set vuid in check_user_ok().
+ * BUG 13505: lib: smb_threads: Fix access before init bug.
+ * BUG 13535: s3: smbd: Fix path check in
+ smbd_smb2_create_durable_lease_check().
+ * BUG 13451: Fail renaming file if that file has open streams.
+
+o Günther Deschner <gd at samba.org>
+ * BUG 13437: Fix building Samba with gcc 8.1.
+
+o David Disseldorp <ddiss at samba.org>
+ * BUG 13506: vfs_ceph: Don't lie about flock support.
+ * BUG 13540: Fix deadlock with ctdb_mutex_ceph_rados_helper.
+
+o Volker Lendecke <vl at samba.org>
+ * BUG 13195: g_lock: Fix lock upgrades.
+ * BUG 13584: vfs_fruit: Fix a panic if fruit_access_check detects a locking
+ conflict.
+
+o Gary Lockyer <gary at catalyst.net.nz>
+ * BUG 13536: The current position in the dns name was not advanced past the
+ '.' character.
+
+o Stefan Metzmacher <metze at samba.org>
+ * BUG 13308: samba-tool domain trust: Fix trust compatibility to Windows
+ Server 1709 and FreeIPA.
+
+o Christof Schmitt <cs at samba.org>
+ * BUG 13478: krb5_wrap: Fix keep_old_entries logic for older kerberos
+ libraries.
+
+o Andreas Schneider <asn at samba.org>
+ * BUG 13437: Fix building Samba with gcc 8.1.
+
+o Martin Schwenke <martin at meltin.net>
+ * BUG 13499: Don't use CTDB_BROADCAST_VNNMAP.
+ * BUG 13500: ctdb-daemon: Only consider client ID for local database attach.
+
+o Karolin Seeger <kseeger at samba.org>
+ * BUG 13499: s3/notifyd.c: Rename CTDB_BROADCAST_VNNMAP to
+ CTDB_BROADCAST_ACTIVE.
+
+o Ralph Wuerthner <ralph.wuerthner at de.ibm.com>
+ * BUG 13568: vfs_time_audit: Fix handling of token_blob in
+ smb_time_audit_offload_read_recv().
+
+
+#######################################
+Reporting bugs & Development Discussion
+#######################################
+
+Please discuss this release on the samba-technical mailing list or by
+joining the #samba-technical IRC channel on irc.freenode.net.
+
+If you do report problems then please try to send high quality
+feedback. If you don't provide vital information to help us track down
+the problem then you will probably be ignored. All bug reports should
+be filed under the "Samba 4.1 and newer" product in the project's Bugzilla
+database (https://bugzilla.samba.org/).
+
+
+======================================================================
+== Our Code, Our Bugs, Our Responsibility.
+== The Samba Team
+======================================================================
+
+
+Release notes for older releases follow:
+----------------------------------------
+
=============================
Release Notes for Samba 4.7.9
August 14, 2018
@@ -74,8 +179,8 @@ database (https://bugzilla.samba.org/).
======================================================================
-Release notes for older releases follow:
-----------------------------------------
+----------------------------------------------------------------------
+
=============================
Release Notes for Samba 4.7.8
diff --git a/auth/auth_log.c b/auth/auth_log.c
index d4c6c44..72d8f81 100644
--- a/auth/auth_log.c
+++ b/auth/auth_log.c
@@ -350,7 +350,7 @@ static void add_version(struct json_context *context, int major, int minor)
static void add_timestamp(struct json_context *context)
{
char buffer[40]; /* formatted time less usec and timezone */
- char timestamp[50]; /* the formatted ISO 8601 time stamp */
+ char timestamp[65]; /* the formatted ISO 8601 time stamp */
char tz[10]; /* formatted time zone */
struct tm* tm_info; /* current local time */
struct timeval tv; /* current system time */
diff --git a/ctdb/doc/ctdb.1.xml b/ctdb/doc/ctdb.1.xml
index 471d825..ae3b9d3 100644
--- a/ctdb/doc/ctdb.1.xml
+++ b/ctdb/doc/ctdb.1.xml
@@ -292,10 +292,9 @@
<title>Virtual Node Number (VNN) map</title>
<para>
Consists of the number of virtual nodes and mapping from
- virtual node numbers to physical node numbers. Virtual
- nodes host CTDB databases. Only nodes that are
- participating in the VNN map can become lmaster or dmaster
- for database records.
+ virtual node numbers to physical node numbers. Only nodes
+ that are participating in the VNN map can become lmaster for
+ database records.
</para>
</refsect3>
diff --git a/ctdb/include/ctdb_private.h b/ctdb/include/ctdb_private.h
index da3760d..03e0068 100644
--- a/ctdb/include/ctdb_private.h
+++ b/ctdb/include/ctdb_private.h
@@ -724,9 +724,12 @@ int ctdb_set_db_readonly(struct ctdb_context *ctdb,
int ctdb_process_deferred_attach(struct ctdb_context *ctdb);
-int32_t ctdb_control_db_attach(struct ctdb_context *ctdb, TDB_DATA indata,
+int32_t ctdb_control_db_attach(struct ctdb_context *ctdb,
+ TDB_DATA indata,
TDB_DATA *outdata,
- uint8_t db_flags, uint32_t client_id,
+ uint8_t db_flags,
+ uint32_t srcnode,
+ uint32_t client_id,
struct ctdb_req_control_old *c,
bool *async_reply);
int32_t ctdb_control_db_detach(struct ctdb_context *ctdb, TDB_DATA indata,
diff --git a/ctdb/protocol/protocol.h b/ctdb/protocol/protocol.h
index e116b3a..07554b5 100644
--- a/ctdb/protocol/protocol.h
+++ b/ctdb/protocol/protocol.h
@@ -43,7 +43,7 @@ enum ctdb_operation {
/* send a broadcast to all nodes in the cluster, active or not */
#define CTDB_BROADCAST_ALL 0xF0000002
/* send a broadcast to all nodes in the current vnn map */
-#define CTDB_BROADCAST_VNNMAP 0xF0000003
+#define CTDB_BROADCAST_ACTIVE 0xF0000003
/* send a broadcast to all connected nodes */
#define CTDB_BROADCAST_CONNECTED 0xF0000004
/* send a broadcast to selected connected nodes */
diff --git a/ctdb/protocol/protocol_debug.c b/ctdb/protocol/protocol_debug.c
index 7c6d862..163bb41 100644
--- a/ctdb/protocol/protocol_debug.c
+++ b/ctdb/protocol/protocol_debug.c
@@ -262,8 +262,8 @@ static void ctdb_pnn_print(uint32_t pnn, FILE *fp)
fprintf(fp, "CURRENT");
} else if (pnn == CTDB_BROADCAST_ALL) {
fprintf(fp, "ALL");
- } else if (pnn == CTDB_BROADCAST_VNNMAP) {
- fprintf(fp, "VNNMAP");
+ } else if (pnn == CTDB_BROADCAST_ACTIVE) {
+ fprintf(fp, "ACTIVE");
} else if (pnn == CTDB_BROADCAST_CONNECTED) {
fprintf(fp, "CONNECTED");
} else if (pnn == CTDB_MULTICAST) {
diff --git a/ctdb/server/ctdb_control.c b/ctdb/server/ctdb_control.c
index 6835cca..063cd1d 100644
--- a/ctdb/server/ctdb_control.c
+++ b/ctdb/server/ctdb_control.c
@@ -267,18 +267,34 @@ static int32_t ctdb_control_dispatch(struct ctdb_context *ctdb,
}
case CTDB_CONTROL_DB_ATTACH:
- return ctdb_control_db_attach(ctdb, indata, outdata, 0, client_id,
- c, async_reply);
+ return ctdb_control_db_attach(ctdb,
+ indata,
+ outdata,
+ 0,
+ srcnode,
+ client_id,
+ c,
+ async_reply);
case CTDB_CONTROL_DB_ATTACH_PERSISTENT:
- return ctdb_control_db_attach(ctdb, indata, outdata,
- CTDB_DB_FLAGS_PERSISTENT, client_id,
- c, async_reply);
+ return ctdb_control_db_attach(ctdb,
+ indata,
+ outdata,
+ CTDB_DB_FLAGS_PERSISTENT,
+ srcnode,
+ client_id,
+ c,
+ async_reply);
case CTDB_CONTROL_DB_ATTACH_REPLICATED:
- return ctdb_control_db_attach(ctdb, indata, outdata,
- CTDB_DB_FLAGS_REPLICATED, client_id,
- c, async_reply);
+ return ctdb_control_db_attach(ctdb,
+ indata,
+ outdata,
+ CTDB_DB_FLAGS_REPLICATED,
+ srcnode,
+ client_id,
+ c,
+ async_reply);
case CTDB_CONTROL_SET_CALL:
return control_not_implemented("SET_CALL", NULL);
@@ -859,7 +875,7 @@ int ctdb_daemon_send_control(struct ctdb_context *ctdb, uint32_t destnode,
return -1;
}
- if (((destnode == CTDB_BROADCAST_VNNMAP) ||
+ if (((destnode == CTDB_BROADCAST_ACTIVE) ||
(destnode == CTDB_BROADCAST_ALL) ||
(destnode == CTDB_BROADCAST_CONNECTED)) &&
!(flags & CTDB_CTRL_FLAG_NOREPLY)) {
@@ -867,7 +883,7 @@ int ctdb_daemon_send_control(struct ctdb_context *ctdb, uint32_t destnode,
return -1;
}
- if (destnode != CTDB_BROADCAST_VNNMAP &&
+ if (destnode != CTDB_BROADCAST_ACTIVE &&
destnode != CTDB_BROADCAST_ALL &&
destnode != CTDB_BROADCAST_CONNECTED &&
(!ctdb_validate_pnn(ctdb, destnode) ||
diff --git a/ctdb/server/ctdb_ltdb_server.c b/ctdb/server/ctdb_ltdb_server.c
index c199aac..ca5bb12 100644
--- a/ctdb/server/ctdb_ltdb_server.c
+++ b/ctdb/server/ctdb_ltdb_server.c
@@ -1105,9 +1105,12 @@ int ctdb_process_deferred_attach(struct ctdb_context *ctdb)
/*
a client has asked to attach a new database
*/
-int32_t ctdb_control_db_attach(struct ctdb_context *ctdb, TDB_DATA indata,
+int32_t ctdb_control_db_attach(struct ctdb_context *ctdb,
+ TDB_DATA indata,
TDB_DATA *outdata,
- uint8_t db_flags, uint32_t client_id,
+ uint8_t db_flags,
+ uint32_t srcnode,
+ uint32_t client_id,
struct ctdb_req_control_old *c,
bool *async_reply)
{
@@ -1128,7 +1131,7 @@ int32_t ctdb_control_db_attach(struct ctdb_context *ctdb, TDB_DATA indata,
* allow all attach from the network since these are always from remote
* recovery daemons.
*/
- if (client_id != 0) {
+ if (srcnode == ctdb->pnn && client_id != 0) {
client = reqid_find(ctdb->idr, client_id, struct ctdb_client);
}
if (client != NULL) {
@@ -1535,9 +1538,15 @@ static void ctdb_ltdb_seqnum_check(struct tevent_context *ev,
TDB_DATA data;
data.dptr = (uint8_t *)&ctdb_db->db_id;
data.dsize = sizeof(uint32_t);
- ctdb_daemon_send_control(ctdb, CTDB_BROADCAST_VNNMAP, 0,
- CTDB_CONTROL_UPDATE_SEQNUM, 0, CTDB_CTRL_FLAG_NOREPLY,
- data, NULL, NULL);
+ ctdb_daemon_send_control(ctdb,
+ CTDB_BROADCAST_ACTIVE,
+ 0,
+ CTDB_CONTROL_UPDATE_SEQNUM,
+ 0,
+ CTDB_CTRL_FLAG_NOREPLY,
+ data,
+ NULL,
+ NULL);
}
ctdb_db->seqnum = new_seqnum;
diff --git a/ctdb/server/ctdb_server.c b/ctdb/server/ctdb_server.c
index 9006741..93256ec 100644
--- a/ctdb/server/ctdb_server.c
+++ b/ctdb/server/ctdb_server.c
@@ -389,14 +389,18 @@ static void ctdb_broadcast_packet_all(struct ctdb_context *ctdb,
}
/*
- broadcast a packet to all nodes in the current vnnmap
+ broadcast a packet to all active nodes
*/
-static void ctdb_broadcast_packet_vnnmap(struct ctdb_context *ctdb,
+static void ctdb_broadcast_packet_active(struct ctdb_context *ctdb,
struct ctdb_req_header *hdr)
{
int i;
- for (i=0;i<ctdb->vnn_map->size;i++) {
- hdr->destnode = ctdb->vnn_map->map[i];
+ for (i = 0; i < ctdb->num_nodes; i++) {
+ if (ctdb->nodes[i]->flags & NODE_FLAGS_INACTIVE) {
+ continue;
+ }
+
+ hdr->destnode = ctdb->nodes[i]->pnn;
ctdb_queue_packet(ctdb, hdr);
}
}
@@ -430,8 +434,8 @@ void ctdb_queue_packet(struct ctdb_context *ctdb, struct ctdb_req_header *hdr)
case CTDB_BROADCAST_ALL:
ctdb_broadcast_packet_all(ctdb, hdr);
return;
- case CTDB_BROADCAST_VNNMAP:
- ctdb_broadcast_packet_vnnmap(ctdb, hdr);
+ case CTDB_BROADCAST_ACTIVE:
+ ctdb_broadcast_packet_active(ctdb, hdr);
return;
case CTDB_BROADCAST_CONNECTED:
ctdb_broadcast_packet_connected(ctdb, hdr);
diff --git a/ctdb/server/ctdb_traverse.c b/ctdb/server/ctdb_traverse.c
index 04a4113..5ea1970 100644
--- a/ctdb/server/ctdb_traverse.c
+++ b/ctdb/server/ctdb_traverse.c
@@ -387,8 +387,8 @@ static struct ctdb_traverse_all_handle *ctdb_daemon_traverse_all(struct ctdb_db_
}
if (ctdb_db_volatile(ctdb_db)) {
- /* normal database, traverse all nodes */
- destination = CTDB_BROADCAST_VNNMAP;
+ /* volatile database, traverse all active nodes */
+ destination = CTDB_BROADCAST_ACTIVE;
} else {
int i;
/* persistent database, traverse one node, preferably
diff --git a/ctdb/tests/scripts/integration.bash b/ctdb/tests/scripts/integration.bash
index d72c471..4cdbb7c 100644
--- a/ctdb/tests/scripts/integration.bash
+++ b/ctdb/tests/scripts/integration.bash
@@ -338,6 +338,7 @@ node_has_status ()
(monon) mpat='^Monitoring mode:ACTIVE \(0\)$' ;;
(monoff) mpat='^Monitoring mode:DISABLED \(1\)$' ;;
(recovered) rpat='^Recovery mode:RECOVERY \(1\)$' ;;
+ (notlmaster) rpat="^hash:.* lmaster:${pnn}\$" ;;
*)
echo "node_has_status: unknown status \"$status\""
return 1
diff --git a/ctdb/tests/simple/79_volatile_db_traverse.sh b/ctdb/tests/simple/79_volatile_db_traverse.sh
new file mode 100755
index 0000000..50732ca
--- /dev/null
+++ b/ctdb/tests/simple/79_volatile_db_traverse.sh
@@ -0,0 +1,94 @@
+#!/bin/bash
+
+test_info()
+{
+ cat <<EOF
+Confirm that traverses of volatile databases work as expected
+
+This is a very simple example. It writes a single record, updates it
+on another node and then confirms that the correct value is found when
+traversing. It then repeats this after removing the LMASTER role from
+the node where the value is updated.
+
+Expected results:
+
+* The expected records should be found
+
+EOF
+}
+
+. "${TEST_SCRIPTS_DIR}/integration.bash"
+
+ctdb_test_init "$@"
+
+set -e
+
+cluster_is_healthy
+
+# Reset configuration
+ctdb_restart_when_done
+
+#
+# Main test
+#
+TESTDB="traverse_db.tdb"
+
+echo "create volatile test database $TESTDB"
+try_command_on_node 0 $CTDB attach "$TESTDB"
+
+echo "wipe test database $TESTDB"
+try_command_on_node 0 $CTDB wipedb "$TESTDB"
+
+echo "write foo=bar0 on node 0"
+try_command_on_node 0 $CTDB writekey "$TESTDB" "foo" "bar0"
+
+echo "write foo=bar1 on node 1"
+try_command_on_node 1 $CTDB writekey "$TESTDB" "foo" "bar1"
+
+echo "do traverse on node 0"
+try_command_on_node -v 0 $CTDB catdb "$TESTDB"
+
+echo "do traverse on node 1"
+try_command_on_node -v 1 $CTDB catdb "$TESTDB"
+
+cat <<EOF
+
+Again, this time with lmaster role off on node 1
+
+EOF
+
+echo "wipe test database $TESTDB"
+try_command_on_node 0 $CTDB wipedb "$TESTDB"
+
+echo "switching off lmaster role on node 1"
+try_command_on_node 1 $CTDB setlmasterrole off
+
+try_command_on_node -v 1 $CTDB getcapabilities
+
+wait_until_node_has_status 1 notlmaster 10 0
+# Wait for recovery and new VNN map to be pushed
+#sleep_for 10
+
+echo "write foo=bar0 on node 0"
+try_command_on_node 0 $CTDB writekey "$TESTDB" "foo" "bar0"
+
+echo "write foo=bar1 on node 1"
+try_command_on_node 1 $CTDB writekey "$TESTDB" "foo" "bar1"
+
+echo "do traverse on node 0"
+try_command_on_node -v 0 $CTDB catdb "$TESTDB"
+
+num=$(echo "$out" | sed -n -e 's|^Dumped \(.*\) records$|\1|p')
+if [ "$num" = 1 ] ; then
+ echo "OK: There was 1 record"
+else
+ echo "BAD: There were ${num} (!= 1) records"
+ exit 1
+fi
+
+if echo "$out" | grep -q "^data(4) = \"bar1\"\$" ; then
+ echo "OK: Data from node 1 was returned"
+else
+ echo "BAD: Data from node 1 was not returned"
+ exit 1
+fi
diff --git a/ctdb/tests/src/ctdb_takeover_tests.c b/ctdb/tests/src/ctdb_takeover_tests.c
index 5093757..f78114a 100644
--- a/ctdb/tests/src/ctdb_takeover_tests.c
+++ b/ctdb/tests/src/ctdb_takeover_tests.c
@@ -254,6 +254,8 @@ int main(int argc, const char *argv[])
int loglevel;
const char *debuglevelstr = getenv("CTDB_TEST_LOGLEVEL");
--
Samba Shared Repository
More information about the samba-cvs
mailing list