Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
ad6d3b4d
Unverified
Commit
ad6d3b4d
authored
Nov 05, 2018
by
k8s-ci-robot
Committed by
GitHub
Nov 05, 2018
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #70629 from code-sleuth/develop
Improve`kubectl get` sorting efficiency
parents
c0d248ad
dba032d5
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
21 additions
and
29 deletions
+21
-29
sorter.go
pkg/kubectl/sorter.go
+21
-29
No files found.
pkg/kubectl/sorter.go
View file @
ad6d3b4d
...
@@ -308,6 +308,7 @@ func (r *RuntimeSort) OriginalPosition(ix int) int {
...
@@ -308,6 +308,7 @@ func (r *RuntimeSort) OriginalPosition(ix int) int {
type
TableSorter
struct
{
type
TableSorter
struct
{
field
string
field
string
obj
*
metav1beta1
.
Table
obj
*
metav1beta1
.
Table
parsedRows
[][][]
reflect
.
Value
}
}
func
(
t
*
TableSorter
)
Len
()
int
{
func
(
t
*
TableSorter
)
Len
()
int
{
...
@@ -319,32 +320,8 @@ func (t *TableSorter) Swap(i, j int) {
...
@@ -319,32 +320,8 @@ func (t *TableSorter) Swap(i, j int) {
}
}
func
(
t
*
TableSorter
)
Less
(
i
,
j
int
)
bool
{
func
(
t
*
TableSorter
)
Less
(
i
,
j
int
)
bool
{
iObj
:=
t
.
obj
.
Rows
[
i
]
.
Object
.
Object
iValues
:=
t
.
parsedRows
[
i
]
jObj
:=
t
.
obj
.
Rows
[
j
]
.
Object
.
Object
jValues
:=
t
.
parsedRows
[
j
]
var
iValues
[][]
reflect
.
Value
var
jValues
[][]
reflect
.
Value
var
err
error
parser
:=
jsonpath
.
New
(
"sorting"
)
.
AllowMissingKeys
(
true
)
err
=
parser
.
Parse
(
t
.
field
)
if
err
!=
nil
{
glog
.
Fatalf
(
"sorting error: %v
\n
"
,
err
)
}
// TODO(juanvallejo): this is expensive for very large sets.
// To improve runtime complexity, build an array which contains all
// resolved fields, and sort that instead.
iValues
,
err
=
findJSONPathResults
(
parser
,
iObj
)
if
err
!=
nil
{
glog
.
Fatalf
(
"Failed to get i values for %#v using %s (%#v)"
,
iObj
,
t
.
field
,
err
)
}
jValues
,
err
=
findJSONPathResults
(
parser
,
jObj
)
if
err
!=
nil
{
glog
.
Fatalf
(
"Failed to get j values for %#v using %s (%v)"
,
jObj
,
t
.
field
,
err
)
}
if
len
(
iValues
)
==
0
||
len
(
iValues
[
0
])
==
0
||
len
(
jValues
)
==
0
||
len
(
jValues
[
0
])
==
0
{
if
len
(
iValues
)
==
0
||
len
(
iValues
[
0
])
==
0
||
len
(
jValues
)
==
0
||
len
(
jValues
[
0
])
==
0
{
glog
.
Fatalf
(
"couldn't find any field with path %q in the list of objects"
,
t
.
field
)
glog
.
Fatalf
(
"couldn't find any field with path %q in the list of objects"
,
t
.
field
)
}
}
...
@@ -354,7 +331,7 @@ func (t *TableSorter) Less(i, j int) bool {
...
@@ -354,7 +331,7 @@ func (t *TableSorter) Less(i, j int) bool {
less
,
err
:=
isLess
(
iField
,
jField
)
less
,
err
:=
isLess
(
iField
,
jField
)
if
err
!=
nil
{
if
err
!=
nil
{
glog
.
Fatalf
(
"Field %s in %T is an unsortable type: %s, err: %v"
,
t
.
field
,
iObj
,
iField
.
Kind
()
.
String
(),
err
)
glog
.
Fatalf
(
"Field %s in %T is an unsortable type: %s, err: %v"
,
t
.
field
,
t
.
parsedRows
,
iField
.
Kind
()
.
String
(),
err
)
}
}
return
less
return
less
}
}
...
@@ -365,16 +342,31 @@ func (t *TableSorter) Sort() error {
...
@@ -365,16 +342,31 @@ func (t *TableSorter) Sort() error {
}
}
func
NewTableSorter
(
table
*
metav1beta1
.
Table
,
field
string
)
*
TableSorter
{
func
NewTableSorter
(
table
*
metav1beta1
.
Table
,
field
string
)
*
TableSorter
{
var
parsedRows
[][][]
reflect
.
Value
parser
:=
jsonpath
.
New
(
"sorting"
)
.
AllowMissingKeys
(
true
)
err
:=
parser
.
Parse
(
field
)
if
err
!=
nil
{
glog
.
Fatalf
(
"sorting error: %v
\n
"
,
err
)
}
for
i
:=
range
table
.
Rows
{
parsedRow
,
err
:=
findJSONPathResults
(
parser
,
table
.
Rows
[
i
]
.
Object
.
Object
)
if
err
!=
nil
{
glog
.
Fatalf
(
"Failed to get values for %#v using %s (%#v)"
,
parsedRow
,
field
,
err
)
}
parsedRows
=
append
(
parsedRows
,
parsedRow
)
}
return
&
TableSorter
{
return
&
TableSorter
{
obj
:
table
,
obj
:
table
,
field
:
field
,
field
:
field
,
parsedRows
:
parsedRows
,
}
}
}
}
func
findJSONPathResults
(
parser
*
jsonpath
.
JSONPath
,
from
runtime
.
Object
)
([][]
reflect
.
Value
,
error
)
{
func
findJSONPathResults
(
parser
*
jsonpath
.
JSONPath
,
from
runtime
.
Object
)
([][]
reflect
.
Value
,
error
)
{
if
unstructuredObj
,
ok
:=
from
.
(
*
unstructured
.
Unstructured
);
ok
{
if
unstructuredObj
,
ok
:=
from
.
(
*
unstructured
.
Unstructured
);
ok
{
return
parser
.
FindResults
(
unstructuredObj
.
Object
)
return
parser
.
FindResults
(
unstructuredObj
.
Object
)
}
}
return
parser
.
FindResults
(
reflect
.
ValueOf
(
from
)
.
Elem
()
.
Interface
())
return
parser
.
FindResults
(
reflect
.
ValueOf
(
from
)
.
Elem
()
.
Interface
())
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment