containers / docker-lvm-plugin

Docker volume plugin for LVM volumes
GNU Lesser General Public License v3.0
155 stars 64 forks source link

Docker time parse issue with plugin #55

Closed debunn closed 5 years ago

debunn commented 6 years ago

Hi!

We have been using an older release of the docker-lvm-plugin (about three months old), and wanted to update to the latest release. I was able to compile the most recent version on CentOS 7.5 successfully, however it appears that there is some date parsing that breaks this version - when I attempt to start up the main docker service, I'm seeing the following error (which wasn't happening previously):

Jul 23 13:48:32 example.com dockerd[21275]: time="2018-07-23T13:48:32.734569316-04:00" level=error msg="VolumeDriver.Get: error reading plugin resp: parsing time \"\"\"\" as \"\"2006-01-02T15:04:05Z07:00\"\": cannot parse \"\"\" as \"2006\""

From what I can find, this appears to be related to the handling of a null time value.

Please let me know if you want / need further information on this.

Thanks!

shishir-a412ed commented 6 years ago

@debunn Can you provide the output of docker info and cat /etc/os-release ?

debunn commented 6 years ago

docker info:

Containers: 7
 Running: 7
 Paused: 0
 Stopped: 0
Images: 14
Server Version: 18.06.0-ce
Storage Driver: devicemapper
 Pool Name: docker-thinpool
 Pool Blocksize: 524.3kB
 Base Device Size: 10.74GB
 Backing Filesystem: xfs
 Udev Sync Supported: true
 Data Space Used: 6.772GB
 Data Space Total: 26.84GB
 Data Space Available: 20.07GB
 Metadata Space Used: 2.232MB
 Metadata Space Total: 5.369GB
 Metadata Space Available: 5.366GB
 Thin Pool Minimum Free Space: 2.684GB
 Deferred Removal Enabled: false
 Deferred Deletion Enabled: false
 Deferred Deleted Device Count: 0
 Library Version: 1.02.146-RHEL7 (2018-01-22)
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local lvm
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: d64c661f1d51c48782c9cec8fda7604785f93587
runc version: 69663f0bd4b60df09991c08812a60108003fa340
init version: fec3683
Security Options:
 seccomp
  Profile: default
Kernel Version: 3.10.0-862.9.1.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 29.78GiB
Name: be-z16.elk.ue1e.aws.secure3.paymentus.com
ID: FHYN:E2BF:I5DT:OIZU:XERU:IKBR:TUNM:2YNA:SIOS:PP76:PT4F:IBO4
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false

cat /etc/os-release:

NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
cblomart commented 6 years ago

Hello,

I am experimenting developping a volume plugin with "github.com/docker/go-plugins-helpers/volume" and have the same issue. In the plugin most CreatedAt stays null.

Docker reports:

VolumeDriver.List: error reading plugin resp: parsing time \"\"\"\" as \"\"2006-01-02T15:04:05Z07:00\"\": cannot parse \"\"\" as \"2006\"

docker info:

Containers: 7
 Running: 5
 Paused: 0
 Stopped: 2
Images: 6
Server Version: 18.05.0-ce
Storage Driver: btrfs
 Build Version: Btrfs v4.16
 Library Version: 102
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local volume-nas
 Network: bridge host ipvlan macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: active
 NodeID: 5zxer71qjpc6kl8gbrx7ecwb2
 Is Manager: true
 ClusterID: y2l3cwya38v4hjiff0t9gkn65
 Managers: 3
 Nodes: 3
 Orchestration:
  Task History Retention Limit: 5
 Raft:
  Snapshot Interval: 10000
  Number of Old Snapshots to Retain: 0
  Heartbeat Tick: 1
  Election Tick: 10
 Dispatcher:
  Heartbeat Period: 5 seconds
 CA Configuration:
  Expiry Duration: 3 months
  Force Rotate: 0
 Autolock Managers: false
 Root Rotation In Progress: false
 Node Address: 192.168.1.222
 Manager Addresses:
  192.168.1.220:2377
  192.168.1.221:2377
  192.168.1.222:2377
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 773c489c9c1b21a6d78b5c538cd395416ec50f88
runc version: 4fc53a81fb7c994640722ac585fa9ca548971871
init version: 949e6fa
Security Options:
 seccomp
  Profile: default
Kernel Version: 4.17.5-1-ARCH
Operating System: Arch Linux
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 1.881GiB
Name: docker03
ID: AL42:6SFP:O3M6:JUDS:3XMI:2JCS:7K3Q:XR2S:LIAX:HBIA:MFZG:N7PJ
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: true
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false
cblomart commented 6 years ago

It would appear it is due to the way golang handles null value on time tagged value with encoding/json.

pmioulet commented 6 years ago

Same issue here

cblomart commented 6 years ago

I made a pull request to go-plugins-helpers: https://github.com/docker/go-plugins-helpers/pull/107

Basicaly it sets json flags on the struct so empty CreatedAt values are ignored when serialized. For my project i am currently using the forked project on my account "cblomart/go-plugins-helpers" and it works like a charm.

If the pull is accepted i will remove my forked repository.

shishir-a412ed commented 6 years ago

Thanks @cblomart for the fix.

shishir-a412ed commented 5 years ago

Fixed with this PR: docker/go-plugins-helpers#107 Closing the issue.