[master] b27fc03d5 mark where we might want to handle ENOSPC

Nils Goroll nils.goroll at uplex.de
Thu Apr 18 08:23:06 UTC 2019


commit b27fc03d5b8f9e2f2fffb19904d39821d622e7de
Author: Nils Goroll <nils.goroll at uplex.de>
Date:   Thu Apr 18 10:15:26 2019 +0200

    mark where we might want to handle ENOSPC
    
    ... which would require error handling on all of the call stack upwards,
    which is not that trivial an endavour. Also, for the calls via
    VSMW_DestroyCluster(), we are actually about to free space, but
    temporarily need more.
    
    Other ideas:
    
    - panic, but leave a better error message
    - monitor free space and refuse loading vcls if insufficient
    - maybe as part of some more general vcl management (e.g.
      "maintain max xx vcls loaded - aka auto-discard)
    
    Ref #2764

diff --git a/bin/varnishd/common/common_vsmw.c b/bin/varnishd/common/common_vsmw.c
index ba83b862b..7a2d9c040 100644
--- a/bin/varnishd/common/common_vsmw.c
+++ b/bin/varnishd/common/common_vsmw.c
@@ -122,6 +122,7 @@ vsmw_idx_head(const struct vsmw *vsmw, int fd)
 	char buf[64];
 
 	bprintf(buf, "# %jd %jd\n", (intmax_t)vsmw->pid, (intmax_t)vsmw->birth);
+	// XXX handle ENOSPC? #2764
 	assert(write(fd, buf, strlen(buf)) == strlen(buf));
 }
 
@@ -177,6 +178,7 @@ vsmw_addseg(struct vsmw *vsmw, struct vsmwseg *seg)
 	vsmw_fmt_index(vsmw, seg);
 	AZ(VSB_finish(vsmw->vsb));
 	s = write(fd, VSB_data(vsmw->vsb), VSB_len(vsmw->vsb));
+	// XXX handle ENOSPC? #2764
 	assert(s == VSB_len(vsmw->vsb));
 	closefd(&fd);
 }
@@ -211,6 +213,7 @@ vsmw_delseg(struct vsmw *vsmw, struct vsmwseg *seg, int fixidx)
 			vsmw_fmt_index(vsmw, seg);
 		AZ(VSB_finish(vsmw->vsb));
 		s = write(fd, VSB_data(vsmw->vsb), VSB_len(vsmw->vsb));
+		// XXX handle ENOSPC? #2764
 		assert(s == VSB_len(vsmw->vsb));
 		closefd(&fd);
 		AZ(renameat(vsmw->vdirfd, t, vsmw->vdirfd, vsmw->idx));


More information about the varnish-commit mailing list