Thanks, I applied this to master.
On Mon, Mar 11, 2013 at 06:18:40PM -0700, Ethan Jackson wrote: > Seems fine to me, I don't know this code well though. > > Acked-by: Ethan Jackson <et...@nicira.com> > > > > On Fri, Mar 1, 2013 at 11:16 AM, Ben Pfaff <b...@nicira.com> wrote: > > > Until now, the OVSDB data journaling implementation has made write errors > > "sticky", so that a single write error persists as long as ovsdb-server is > > alive. However, some kinds of write errors (such as ENOSPC) can be > > transient in practice. I don't know of a good reason to make such errors > > sticky, so this commit makes the journaling code retry writes even after > > an error occurs, allowing ovsdb-server to recover from transient errors. > > > > Reported-by: likunyun <kunyu...@hotmail.com> > > Signed-off-by: Ben Pfaff <b...@nicira.com> > > --- > > ovsdb/log.c | 14 ++++++-------- > > 1 files changed, 6 insertions(+), 8 deletions(-) > > > > diff --git a/ovsdb/log.c b/ovsdb/log.c > > index 440e8d0..ea3c3f3 100644 > > --- a/ovsdb/log.c > > +++ b/ovsdb/log.c > > @@ -1,4 +1,4 @@ > > -/* Copyright (c) 2009, 2010, 2011, 2012 Nicira, Inc. > > +/* Copyright (c) 2009, 2010, 2011, 2012, 2013 Nicira, Inc. > > * > > * Licensed under the Apache License, Version 2.0 (the "License"); > > * you may not use this file except in compliance with the License. > > @@ -48,7 +48,7 @@ struct ovsdb_log { > > struct lockfile *lockfile; > > FILE *stream; > > struct ovsdb_error *read_error; > > - struct ovsdb_error *write_error; > > + bool write_error; > > enum ovsdb_log_mode mode; > > }; > > > > @@ -133,7 +133,7 @@ ovsdb_log_open(const char *name, enum > > ovsdb_log_open_mode open_mode, > > file->prev_offset = 0; > > file->offset = 0; > > file->read_error = NULL; > > - file->write_error = NULL; > > + file->write_error = false; > > file->mode = OVSDB_LOG_READ; > > *filep = file; > > return NULL; > > @@ -154,7 +154,6 @@ ovsdb_log_close(struct ovsdb_log *file) > > fclose(file->stream); > > lockfile_unlock(file->lockfile); > > ovsdb_error_destroy(file->read_error); > > - ovsdb_error_destroy(file->write_error); > > free(file); > > } > > } > > @@ -332,10 +331,9 @@ ovsdb_log_write(struct ovsdb_log *file, struct json > > *json) > > > > json_string = NULL; > > > > - if (file->write_error) { > > - return ovsdb_error_clone(file->write_error); > > - } else if (file->mode == OVSDB_LOG_READ) { > > + if (file->mode == OVSDB_LOG_READ || file->write_error) { > > file->mode = OVSDB_LOG_WRITE; > > + file->write_error = false; > > if (fseeko(file->stream, file->offset, SEEK_SET)) { > > error = ovsdb_io_error(errno, "%s: cannot seek to offset > > %lld", > > file->name, (long long int) > > file->offset); > > @@ -383,7 +381,7 @@ ovsdb_log_write(struct ovsdb_log *file, struct json > > *json) > > return NULL; > > > > error: > > - file->write_error = ovsdb_error_clone(error); > > + file->write_error = true; > > free(json_string); > > return error; > > } > > -- > > 1.7.2.5 > > > > _______________________________________________ > > dev mailing list > > dev@openvswitch.org > > http://openvswitch.org/mailman/listinfo/dev > > _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev