Bonjour Luc,
It's a known bug in 3.1.3
The attached patch fix it.
Jean-Louis
Luc Lalonde wrote:
Hello Folks,
Since I've upgraded from Amanda-2.5.2p1 to Amanda-3.1.x, I've been getting
connection errors almost every day...
Here's a snipet of the type of errors I'm getting:
############### Begin ###########################
These dumps were to tape vtape-14.
The next tape Amanda expects to use is: vtape-15.
FAILURE DUMP SUMMARY:
chunker: FATAL startup_chunker failed: error accepting header stream:
Connection timed out
server1 /etc lev 1 FAILED [Can't open data output stream: Connection refused]
server1 /etc lev 1 FAILED [error accepting data stream: Connection timed out]
server1 /etc lev 1 was successfully retried
server2 /root lev 1 FAILED [port open: Connection refused]
server2 /root lev 1 was successfully retried
############### End ###########################
Here are my config files:
############### Begin amanda.conf ##############
inparallel 10
netusage 100 mbps
maxdumps 2
dumpcycle 2 weeks
runspercycle 14
tapecycle 16 tapes
bumpsize 20 Mb
bumpdays 1
bumpmult 4
etimeout -21600
dtimeout 10800
autoflush yes
runtapes 1
tpchanger "chg-disk:/amanda/VTAPE/slots"
tapetype HARDDISK
define tapetype HARDDISK {
length 204800 mbytes
}
holdingdisk hd1 {
comment "main holding disk"
directory "/amanda/stage/Journalier-VTAPE"
use 1000 Gb
chunksize 1Gb
}
columnspec
"Hostname=0:8,Disk=1:14,OrigKB=1:10,OutKB=1:10,DumpRate=1:7,TapeRate=1:7"
infofile "/amanda/home/Journalier-VTAPE/curinfo"
logdir "/amanda/home/Journalier-VTAPE"
indexdir "/amanda/home/Journalier-VTAPE/index"
# dumptypes
define dumptype global {
comment "Global definitions"
index yes
record yes
auth "bsdtcp"
}
define dumptype full-tar {
global
program "GNUTAR"
comment "Full tar of this filesystem always"
compress client fast
priority high
dumpcycle 0
}
define dumptype exclude-tar {
global
program "GNUTAR"
comment "root partitions dumped with tar"
compress client fast
exclude list "/etc/amanda/exclude.gtar"
priority low
}
define dumptype enseign-tar {
global
program "GNUTAR"
comment "root partitions dumped with tar"
compress client fast
priority low
}
define dumptype server-estimate {
global
program "GNUTAR"
comment "root partitions dumped with tar"
compress client fast
estimate server
priority low
}
define dumptype root-tar {
global
program "GNUTAR"
comment "root partitions dumped with tar"
compress client fast
priority low
}
# network interfaces
define interface local {
comment "a local disk"
use 20 mbps
}
define interface eth2 {
comment "1000 Mbps ethernet"
use 1000 mbps
}
############### End amanda.conf ##############
#### Begin /etc/xinetd.d/amandaserver #########
service amanda
{
disable = no
socket_type = stream
protocol = tcp
wait = no
user = amandabackup
group = disk
groups = yes
server = /usr/libexec/amanda/amandad
server_args = -auth=bsdtcp amdump amindexd amidxtaped
}
#### End /etc/xinetd.d/amandaserver #########
#### Begin /etc/xinetd.d/amandaclient #########
service amanda
{
disable = no
socket_type = stream
protocol = tcp
wait = no
user = amandabackup
group = disk
groups = yes
server = /usr/libexec/amanda/amandad
server_args = -auth=bsdtcp amdump
}
#### End /etc/xinetd.d/amandaclient #########
And finally, here's a snippet of a pertinent dumper debug:
############## begin dump debug #####################
Wed Nov 17 23:34:44 2010: dumper: security_streaminit(stream=0x1b64d110,
driver=0x3414c66520 (BSDTCP))
Wed Nov 17 23:34:44 2010: dumper: security_streaminit(stream=0x1b655170,
driver=0x3414c66520 (BSDTCP))
Wed Nov 17 23:34:44 2010: dumper: security_streaminit(stream=0x1b65d1d0,
driver=0x3414c66520 (BSDTCP))
Wed Nov 17 23:34:44 2010: dumper: security_close(handle=0x1b643760,
driver=0x3414c66520 (BSDTCP))
Wed Nov 17 23:34:44 2010: dumper: security_stream_close(0x1b644760)
Wed Nov 17 23:34:44 2010: dumper: Building type FILE header of 32768-32768
bytes with name='server1' disk='/etc' dumplevel=1 and blocksize=32768
Wed Nov 17 23:34:44 2010: dumper: Sending data to 127.0.0.1:11039
Wed Nov 17 23:34:44 2010: dumper: make_socket opening socket with family 2
Wed Nov 17 23:34:44 2010: dumper: connect_port: Try port 11004: available -
Address already in use
Wed Nov 17 23:34:44 2010: dumper: connect_port: Skip port 11000: owned by irisa.
Wed Nov 17 23:34:44 2010: dumper: connect_port: Skip port 11001: owned by
metasys.
Wed Nov 17 23:34:44 2010: dumper: make_socket opening socket with family 2
Wed Nov 17 23:34:44 2010: dumper: connect_port: Try port 11002: available -
Success
Wed Nov 17 23:34:44 2010: dumper: connect_portrange: Connect from 0.0.0.0.11002
failed: Connection refused
Wed Nov 17 23:34:44 2010: dumper: connect_portrange: connect to 127.0.0.1.11039
failed: Connection refused
Wed Nov 17 23:34:44 2010: dumper: stream_client: Could not bind to port in
range 11000-11040.
Wed Nov 17 23:34:44 2010: dumper: security_stream_close(0x1b64d110)
Wed Nov 17 23:34:44 2010: dumper: security_stream_close(0x1b655170)
Wed Nov 17 23:34:44 2010: dumper: security_stream_close(0x1b65d1d0)
Wed Nov 17 23:34:44 2010: dumper: putresult: 10 FAILED
Wed Nov 17 23:39:45 2010: dumper: getcmd: PORT-DUMP 02-00036 11023 server1 ffffffff9efefbffffffffff01 /etc NODEVICE 1
2010:11:17:4:0:3 GNUTAR "" "" "" "" bsdtcp AMANDA 12
7.0.0.1:11024 |" <auth>bsdtcp</auth>\n <compress>FAST</compress>\n <record>YES</record>\n
<index>YES</index>\n <datapath>AMANDA</datapath>\n <exclude>\n <lis
t>/etc/amanda/exclude.gtar</list>\n </exclude>\n"
Wed Nov 17 23:39:45 2010: dumper: Sending header to localhost:11023
Wed Nov 17 23:39:45 2010: dumper: make_socket opening socket with family 2
Wed Nov 17 23:39:45 2010: dumper: connect_port: Try port 11004: available -
Success
Wed Nov 17 23:39:45 2010: dumper: connected to 127.0.0.1.11023
Wed Nov 17 23:39:45 2010: dumper: our side is 0.0.0.0.11004
Wed Nov 17 23:39:45 2010: dumper: try_socksize: send buffer size is 65536
Wed Nov 17 23:39:45 2010: dumper: send request:
############## end dump debug #####################
Anyone have ideas on how to resolve this problem?
Thanks!
Index: xfer-src/element-glue.c
===================================================================
--- xfer-src/element-glue.c (revision 3580)
+++ xfer-src/element-glue.c (working copy)
@@ -153,10 +153,6 @@
return -1;
}
- /* close the listening socket now, for good measure */
- close(*socketp);
- *socketp = -1;
-
return sock;
}
@@ -1071,10 +1067,10 @@
/* close our pipes if they're still open (they shouldn't be!) */
if (self->pipe[0] != -1) close(self->pipe[0]);
if (self->pipe[1] != -1) close(self->pipe[1]);
- if (self->input_listen_socket != -1) close(self->input_listen_socket);
- if (self->output_listen_socket != -1) close(self->output_listen_socket);
if (self->input_data_socket != -1) close(self->input_data_socket);
if (self->output_data_socket != -1) close(self->output_data_socket);
+ if (self->input_listen_socket != -1) close(self->input_listen_socket);
+ if (self->output_listen_socket != -1) close(self->output_listen_socket);
if (self->ring) {
/* empty the ring buffer, ignoring syncronization issues */
Index: server-src/chunker.c
===================================================================
--- server-src/chunker.c (revision 3580)
+++ server-src/chunker.c (working copy)
@@ -102,8 +102,8 @@
static void databuf_init(struct databuf *, int, char *, off_t, off_t);
static int databuf_flush(struct databuf *);
-static int startup_chunker(char *, off_t, off_t, struct databuf *, int *);
-static int do_chunk(int, struct databuf *, int);
+static int startup_chunker(char *, off_t, off_t, struct databuf *, int *, int *);
+static int do_chunk(int, struct databuf *, int, int);
int
@@ -123,6 +123,7 @@
config_overrides_t *cfg_ovr = NULL;
char *cfg_opt = NULL;
char *m;
+ int header_socket;
int data_socket;
/*
@@ -296,13 +297,13 @@
}
if ((header_fd = startup_chunker(filename, use, chunksize, &db,
- &data_socket)) < 0) {
+ &header_socket, &data_socket)) < 0) {
q = quote_string(vstrallocf(_("[chunker startup failed: %s]"), errstr));
putresult(TRYAGAIN, "%s %s\n", handle, q);
error("startup_chunker failed: %s", errstr);
}
command_in_transit = NULL;
- if (header_fd >= 0 && do_chunk(header_fd, &db, data_socket)) {
+ if (header_fd >= 0 && do_chunk(header_fd, &db, header_socket, data_socket)) {
char kb_str[NUM_STR_SIZE];
char kps_str[NUM_STR_SIZE];
double rt;
@@ -418,6 +419,7 @@
off_t use,
off_t chunksize,
struct databuf * db,
+ int *headersocket,
int *datasocket)
{
int header_fd, outfd;
@@ -463,7 +465,6 @@
aclose(data_socket);
return -1;
}
- aclose(header_socket);
tmp_filename = vstralloc(filename, ".tmp", NULL);
pc = strrchr(tmp_filename, '/');
@@ -493,6 +494,7 @@
amfree(tmp_filename);
databuf_init(db, outfd, filename, use, chunksize);
db->filename_seq++;
+ *headersocket = header_socket;
*datasocket = data_socket;
return header_fd;
}
@@ -501,6 +503,7 @@
do_chunk(
int header_fd,
struct databuf * db,
+ int header_socket,
int data_socket)
{
size_t nread;
@@ -519,6 +522,8 @@
* chunk code will rewrite it.
*/
nread = full_read(header_fd, header_buf, SIZEOF(header_buf));
+ aclose(header_fd);
+ aclose(header_socket);
if (nread != sizeof(header_buf)) {
if(errno != 0) {
errstr = vstrallocf(_("cannot read header: %s"), strerror(errno));
@@ -556,7 +561,6 @@
aclose(data_socket);
return 0;
}
- aclose(data_socket);
/*
* We've written the file header. Now, just write data until the
@@ -567,12 +571,16 @@
db->datain += nread;
while(db->dataout < db->datain) {
if(!databuf_flush(db)) {
+ aclose(data_fd);
+ aclose(data_socket);
return 0;
}
}
}
while(db->dataout < db->datain) {
if(!databuf_flush(db)) {
+ aclose(data_fd);
+ aclose(data_socket);
return 0;
}
}
@@ -580,6 +588,8 @@
dumpsize += (off_t)1; /* count partial final KByte */
filesize += (off_t)1;
}
+ aclose(data_fd);
+ aclose(data_socket);
return 1;
}